From patchwork Thu Sep 19 17:53:28 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Antonio Terceiro X-Patchwork-Id: 20463 Return-Path: X-Original-To: linaro@patches.linaro.org Delivered-To: linaro@patches.linaro.org Received: from mail-qa0-f71.google.com (mail-qa0-f71.google.com [209.85.216.71]) by ip-10-151-82-157.ec2.internal (Postfix) with ESMTPS id D7C3123906 for ; Thu, 19 Sep 2013 17:53:34 +0000 (UTC) Received: by mail-qa0-f71.google.com with SMTP id k15sf6288711qaq.2 for ; Thu, 19 Sep 2013 10:53:34 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:delivered-to:mime-version:to:from:subject :message-id:date:reply-to:sender:errors-to:precedence :x-original-sender:x-original-authentication-results:mailing-list :list-id:list-post:list-help:list-archive:list-unsubscribe :content-type; bh=ohKtCPvMikVaxNqqIPl4QE1UDz52IU5+aaCXjsUbGCs=; b=aUJt34dAIw9iggxNAFJJf7zRQHJ6FoKJx0MiRSRBX7oyaw8Rbog0rj7G8aAXP/kbxL NHeTKS2JW8TbKe43et/EOL00Z/RhJq4DAloMy9fRNAE/xt7V05Ks+on65r4YXxvJIG9L BijNF97cz9Lza1oRuzeZopGLqeicq80apD/lDAtVI1KMqfFlm+qyaYGxaQ1nQ1namU9i rqzMCD3NfKC4000dZrIleHOxlsWI7sCgt3sBmFw+Hx2nGGhkI0dJShc4RQ119R3gct2L JXYNDVunQSCEExMrsT8dJZrZRL4I02GjZY5B1H15hGsuduY53PFnoyKL7nKBV7wvfcCM oJ4g== X-Gm-Message-State: ALoCoQlnw34SMTcNsSDo1/1R1dz36tFKkm6Wj2i8Gx66icldlcmi+gthqO8DpUSlBZSYJyxrXb8G X-Received: by 10.236.80.42 with SMTP id j30mr1025018yhe.29.1379613214298; Thu, 19 Sep 2013 10:53:34 -0700 (PDT) X-BeenThere: patchwork-forward@linaro.org Received: by 10.49.25.66 with SMTP id a2ls3979236qeg.95.gmail; Thu, 19 Sep 2013 10:53:34 -0700 (PDT) X-Received: by 10.52.32.129 with SMTP id j1mr41995vdi.55.1379613213719; Thu, 19 Sep 2013 10:53:33 -0700 (PDT) Received: from mail-ve0-f178.google.com (mail-ve0-f178.google.com [209.85.128.178]) by mx.google.com with ESMTPS id b6si2057338veo.136.1969.12.31.16.00.00 (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 19 Sep 2013 10:53:33 -0700 (PDT) Received-SPF: neutral (google.com: 209.85.128.178 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) client-ip=209.85.128.178; Received: by mail-ve0-f178.google.com with SMTP id jw12so6996358veb.23 for ; Thu, 19 Sep 2013 10:53:33 -0700 (PDT) X-Received: by 10.52.76.36 with SMTP id h4mr49260vdw.46.1379613213112; Thu, 19 Sep 2013 10:53:33 -0700 (PDT) X-Forwarded-To: patchwork-forward@linaro.org X-Forwarded-For: patch@linaro.org patchwork-forward@linaro.org Delivered-To: patches@linaro.org Received: by 10.220.174.196 with SMTP id u4csp291280vcz; Thu, 19 Sep 2013 10:53:32 -0700 (PDT) X-Received: by 10.49.25.102 with SMTP id b6mr5808553qeg.91.1379613211642; Thu, 19 Sep 2013 10:53:31 -0700 (PDT) Received: from indium.canonical.com (indium.canonical.com. [91.189.90.7]) by mx.google.com with ESMTPS id ik6si753791qab.85.1969.12.31.16.00.00 (version=TLSv1 cipher=RC4-SHA bits=128/128); Thu, 19 Sep 2013 10:53:31 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of bounces@canonical.com designates 91.189.90.7 as permitted sender) client-ip=91.189.90.7; Received: from ackee.canonical.com ([91.189.89.26]) by indium.canonical.com with esmtp (Exim 4.71 #1 (Debian)) id 1VMiPx-0002Cq-2D for ; Thu, 19 Sep 2013 17:53:29 +0000 Received: from ackee.canonical.com (localhost [127.0.0.1]) by ackee.canonical.com (Postfix) with ESMTP id D829EE0504 for ; Thu, 19 Sep 2013 17:53:28 +0000 (UTC) MIME-Version: 1.0 X-Launchpad-Project: lava-dashboard X-Launchpad-Branch: ~linaro-validation/lava-dashboard/trunk X-Launchpad-Message-Rationale: Subscriber X-Launchpad-Branch-Revision-Number: 423 X-Launchpad-Notification-Type: branch-revision To: Linaro Patch Tracker From: noreply@launchpad.net Subject: [Branch ~linaro-validation/lava-dashboard/trunk] Rev 423: This package is obsolete Message-Id: <20130919175328.24732.69369.launchpad@ackee.canonical.com> Date: Thu, 19 Sep 2013 17:53:28 -0000 Reply-To: noreply@launchpad.net Sender: bounces@canonical.com Errors-To: bounces@canonical.com Precedence: list X-Generated-By: Launchpad (canonical.com); Revision="16765"; Instance="launchpad-lazr.conf" X-Launchpad-Hash: 32bfe9a7b9f50fcc946803e8ee7f13ee1efa552a X-Removed-Original-Auth: Dkim didn't pass. X-Original-Sender: noreply@launchpad.net X-Original-Authentication-Results: mx.google.com; spf=neutral (google.com: 209.85.128.178 is neither permitted nor denied by best guess record for domain of patch+caf_=patchwork-forward=linaro.org@linaro.org) smtp.mail=patch+caf_=patchwork-forward=linaro.org@linaro.org Mailing-list: list patchwork-forward@linaro.org; contact patchwork-forward+owners@linaro.org List-ID: X-Google-Group-Id: 836684582541 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , ------------------------------------------------------------ revno: 423 committer: Antonio Terceiro branch nick: trunk timestamp: Thu 2013-09-19 14:47:28 -0300 message: This package is obsolete removed: COPYING.AGPL-3 HACKING INSTALL MANIFEST.in NEWS README TODO assets.src/ assets.src/icons.xcf contrib/ contrib/install.sh contrib/virtualenv-install.sh dashboard_app/ dashboard_app/__init__.py dashboard_app/admin.py dashboard_app/bread_crumbs.py dashboard_app/extension.py dashboard_app/filters.py dashboard_app/fixtures/ dashboard_app/fixtures/hacking_admin_user.json dashboard_app/fixtures/hacking_gcc_bundle_stream.json dashboard_app/fixtures/hacking_initial_bundle_stream.json dashboard_app/fixtures/hacking_localhost_site.json dashboard_app/fixtures/test_run_detail.json dashboard_app/helpers.py dashboard_app/managers.py dashboard_app/migrations/ dashboard_app/migrations/0001_initial.py dashboard_app/migrations/0002_add_index_NamedAttribute_object_id_and_content_type_id_and_name.py dashboard_app/migrations/0003_add_index_HardwareDevice_device_type.py dashboard_app/migrations/0004_auto__add_softwarepackagescratch.py dashboard_app/migrations/0005_auto__chg_field_softwarepackage_version__chg_field_softwarepackage_nam.py dashboard_app/migrations/0006_auto__chg_field_bundledeserializationerror_bundle.py dashboard_app/migrations/0007_auto__add_tag.py dashboard_app/migrations/0008_auto__add_testingeffort.py dashboard_app/migrations/0009_auto__add_testrundenormalization.py dashboard_app/migrations/0010_denormalize_test_run.py dashboard_app/migrations/0011_auto__chg_field_namedattribute_value__chg_field_namedattribute_name.py dashboard_app/migrations/0012_auto__del_field_bundle_content__add_field_bundle__raw_content__add_fie.py dashboard_app/migrations/0013_auto__chg_field_testcase_units__chg_field_testcase_test_case_id__chg_f.py dashboard_app/migrations/0014_auto__add_imageset__add_image__add_imageattribute.py dashboard_app/migrations/0015_auto__add_launchpadbug.py dashboard_app/migrations/0016_auto__add_field_image_uploaded_by__chg_field_image_name.py dashboard_app/migrations/0017_auto__add_testrunfilterattribute__add_testrunfilter__add_unique_testru.py dashboard_app/migrations/0018_auto__add_field_testrunfilter_public.py dashboard_app/migrations/0019_auto__add_testrunfiltersubscription__add_unique_testrunfiltersubscript.py dashboard_app/migrations/0020_auto__add_field_testrunfilter_build_number_attribute.py dashboard_app/migrations/0021_add_cast_integer.py dashboard_app/migrations/0022_auto__add_testrunfiltertest__add_testrunfiltertestcase__del_field_test.py dashboard_app/migrations/0023_auto__add_field_testrunfilter_uploaded_by__add_field_testrunfilter_ena.py dashboard_app/migrations/0024_auto__del_imageattribute__del_field_image_uploaded_by__del_field_image.py dashboard_app/migrations/0025_auto__add_field_testrun_microseconds.py dashboard_app/migrations/0026_auto__add_pmqabundlestream.py dashboard_app/migrations/0027_auto__del_testingeffort.py dashboard_app/migrations/0028_auto__chg_field_test_test_id__chg_field_test_name.py dashboard_app/migrations/0029_auto__add_testdefinition.py dashboard_app/migrations/0030_auto__add_imagecharttestcase__add_imagereport__add_imagecharttestrun__.py dashboard_app/migrations/0031_auto__del_imagecharttestrun__add_imagecharttest__add_unique_imagechart.py dashboard_app/migrations/__init__.py dashboard_app/models.py dashboard_app/patches.py dashboard_app/repositories/ dashboard_app/repositories/__init__.py dashboard_app/repositories/common.py dashboard_app/repositories/data_report.py dashboard_app/repositories/data_view.py dashboard_app/signals.py dashboard_app/static/ dashboard_app/static/dashboard_app/ dashboard_app/static/dashboard_app/css/ dashboard_app/static/dashboard_app/css/dashboard.css dashboard_app/static/dashboard_app/css/filter-detail.css dashboard_app/static/dashboard_app/css/filter-edit.css dashboard_app/static/dashboard_app/css/image-charts.css dashboard_app/static/dashboard_app/css/image-report.css dashboard_app/static/dashboard_app/css/pygments.css dashboard_app/static/dashboard_app/css/wider-filter-horizontal.css dashboard_app/static/dashboard_app/images/ dashboard_app/static/dashboard_app/images/ajax-progress.gif dashboard_app/static/dashboard_app/images/attachment.png dashboard_app/static/dashboard_app/images/details_close.png dashboard_app/static/dashboard_app/images/details_open.png dashboard_app/static/dashboard_app/images/file-icon.png dashboard_app/static/dashboard_app/images/icon-fail.png dashboard_app/static/dashboard_app/images/icon-pass.png dashboard_app/static/dashboard_app/images/icon-skip.png dashboard_app/static/dashboard_app/images/icon-unknown.png dashboard_app/static/dashboard_app/js/ dashboard_app/static/dashboard_app/js/FixedHeader.min.js dashboard_app/static/dashboard_app/js/excanvas.min.js dashboard_app/static/dashboard_app/js/filter-detail.js dashboard_app/static/dashboard_app/js/filter-edit.js dashboard_app/static/dashboard_app/js/image-report-editor.js dashboard_app/static/dashboard_app/js/image-report.js dashboard_app/static/dashboard_app/js/jquery.dashboard.js dashboard_app/static/dashboard_app/js/jquery.flot.axislabels.js dashboard_app/static/dashboard_app/js/jquery.flot.dashes.min.js dashboard_app/static/dashboard_app/js/jquery.flot.min.js dashboard_app/static/dashboard_app/js/jquery.flot.navigate.min.js dashboard_app/static/dashboard_app/js/jquery.flot.selection.min.js dashboard_app/static/dashboard_app/js/jquery.flot.stack.min.js dashboard_app/static/dashboard_app/js/jquery.formset.js dashboard_app/static/dashboard_app/js/jquery.rpc.js dashboard_app/static/dashboard_app/js/jquery.tooltip.min.js dashboard_app/static/dashboard_app/js/jstorage.min.js dashboard_app/templates/ dashboard_app/templates/admin/ dashboard_app/templates/admin/dashboard_app/ dashboard_app/templates/admin/dashboard_app/cleanup_selected_bundle_confirmation.html dashboard_app/templates/dashboard_app/ dashboard_app/templates/dashboard_app/_ajax_bundle_viewer.html dashboard_app/templates/dashboard_app/_attachments.html dashboard_app/templates/dashboard_app/_bundle_stream_sidebar.html dashboard_app/templates/dashboard_app/_content.html dashboard_app/templates/dashboard_app/_content_with_sidebar.html dashboard_app/templates/dashboard_app/_extrahead.html dashboard_app/templates/dashboard_app/_test_run_list_table.html dashboard_app/templates/dashboard_app/add_test_definition.html dashboard_app/templates/dashboard_app/attachment_view.html dashboard_app/templates/dashboard_app/bundle_detail.html dashboard_app/templates/dashboard_app/bundle_list.html dashboard_app/templates/dashboard_app/bundle_stream_list.html dashboard_app/templates/dashboard_app/data_view_detail.html dashboard_app/templates/dashboard_app/data_view_list.html dashboard_app/templates/dashboard_app/filter_add.html dashboard_app/templates/dashboard_app/filter_compare_matches.html dashboard_app/templates/dashboard_app/filter_delete.html dashboard_app/templates/dashboard_app/filter_detail.html dashboard_app/templates/dashboard_app/filter_form.html dashboard_app/templates/dashboard_app/filter_form_test.html dashboard_app/templates/dashboard_app/filter_preview.html dashboard_app/templates/dashboard_app/filter_results_table.html dashboard_app/templates/dashboard_app/filter_subscribe.html dashboard_app/templates/dashboard_app/filter_subscription_mail.txt dashboard_app/templates/dashboard_app/filter_summary.html dashboard_app/templates/dashboard_app/filters_list.html dashboard_app/templates/dashboard_app/image-report.html dashboard_app/templates/dashboard_app/image-reports.html dashboard_app/templates/dashboard_app/image_chart_filter_form.html dashboard_app/templates/dashboard_app/image_report_chart_detail.html dashboard_app/templates/dashboard_app/image_report_chart_form.html dashboard_app/templates/dashboard_app/image_report_detail.html dashboard_app/templates/dashboard_app/image_report_form.html dashboard_app/templates/dashboard_app/image_report_list.html dashboard_app/templates/dashboard_app/index.html dashboard_app/templates/dashboard_app/pmqa-view.html dashboard_app/templates/dashboard_app/pmqa_filter.html dashboard_app/templates/dashboard_app/report_detail.html dashboard_app/templates/dashboard_app/report_list.html dashboard_app/templates/dashboard_app/test_definition.html dashboard_app/templates/dashboard_app/test_result_detail.html dashboard_app/templates/dashboard_app/test_run_detail.html dashboard_app/templates/dashboard_app/test_run_hardware_context.html dashboard_app/templates/dashboard_app/test_run_list.html dashboard_app/templates/dashboard_app/test_run_software_context.html dashboard_app/templatetags/ dashboard_app/templatetags/__init__.py dashboard_app/templatetags/call.py dashboard_app/templatetags/stylize.py dashboard_app/tests/ dashboard_app/tests/__init__.py dashboard_app/tests/call_helper.py dashboard_app/tests/fixtures.py dashboard_app/tests/import_prohibitor.py dashboard_app/tests/models/ dashboard_app/tests/models/__init__.py dashboard_app/tests/models/attachment.py dashboard_app/tests/models/bundle.py dashboard_app/tests/models/bundle_deserialization_error.py dashboard_app/tests/models/bundle_stream.py dashboard_app/tests/models/data_report.py dashboard_app/tests/models/hw_device.py dashboard_app/tests/models/named_attribute.py dashboard_app/tests/models/sw_package.py dashboard_app/tests/models/test.py dashboard_app/tests/models/test_case.py dashboard_app/tests/models/test_result.py dashboard_app/tests/models/test_run.py dashboard_app/tests/other/ dashboard_app/tests/other/__init__.py dashboard_app/tests/other/csrf.py dashboard_app/tests/other/dashboard_api.py dashboard_app/tests/other/dataview.py dashboard_app/tests/other/deserialization.py dashboard_app/tests/other/login.py dashboard_app/tests/other/test_client.py dashboard_app/tests/regressions/ dashboard_app/tests/regressions/LP658917.json dashboard_app/tests/regressions/LP658917.py dashboard_app/tests/regressions/__init__.py dashboard_app/tests/utils.py dashboard_app/tests/views/ dashboard_app/tests/views/__init__.py dashboard_app/tests/views/bundle_stream_list_view.py dashboard_app/tests/views/redirects.py dashboard_app/tests/views/test_run_detail_view.py dashboard_app/tests/views/test_run_list_view.py dashboard_app/urls.py dashboard_app/views/ dashboard_app/views/__init__.py dashboard_app/views/filters/ dashboard_app/views/filters/__init__.py dashboard_app/views/filters/forms.py dashboard_app/views/filters/tables.py dashboard_app/views/filters/views.py dashboard_app/views/image_reports/ dashboard_app/views/image_reports/__init__.py dashboard_app/views/image_reports/forms.py dashboard_app/views/image_reports/views.py dashboard_app/views/images.py dashboard_app/views/pmqa.py dashboard_app/xmlrpc.py doc/ doc/changes.rst doc/conf.py doc/faq.rst doc/index.rst doc/installation.rst doc/reference.rst doc/usage.rst examples/ examples/bundles/ examples/bundles/attachment.json examples/bundles/big.json examples/bundles/broken.json examples/bundles/example_coremark.json examples/bundles/one-run.json examples/bundles/source-refs.json examples/bundles/templates/ examples/bundles/templates/dummy.json examples/bundles/test_result_detail.json examples/bundles/two-runs.json examples/reports/ examples/reports/data-views.html examples/reports/data-views.xml examples/reports/hello-world.html examples/reports/hello-world.xml examples/reports/query-data-view.html examples/reports/query-data-view.xml examples/views/ examples/views/boards.xml examples/views/bundle-import-queue.xml examples/views/bundles.xml examples/views/streams.xml examples/views/testruns.xml production/ setup-dev-env.sh setup.cfg setup.py test.sh added: README.obsolete.txt --- lp:lava-dashboard https://code.launchpad.net/~linaro-validation/lava-dashboard/trunk You are subscribed to branch lp:lava-dashboard. To unsubscribe from this branch go to https://code.launchpad.net/~linaro-validation/lava-dashboard/trunk/+edit-subscription === removed file 'COPYING.AGPL-3' --- COPYING.AGPL-3 2010-09-22 08:51:55 +0000 +++ COPYING.AGPL-3 1970-01-01 00:00:00 +0000 @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. === removed file 'HACKING' --- HACKING 2010-12-20 10:59:50 +0000 +++ HACKING 1970-01-01 00:00:00 +0000 @@ -1,13 +0,0 @@ -To get the development (nonstable) code and start hacking on it: - -$ bzr get lp:launch-control -$ cd launch-control -$ ./setup-dev-env.sh -$ ./dashboard_server/manage.py runserver & -$ xdg-open http://localhost:8000/ - -You will need to have some dependencies installed and some stuff from infrastructure snapshots ppa: - -$ sudo add-apt-repositroy ppa:linaro-infrastructure/launch-control-snapshots -$ sudo apt-get update -$ sudo apt-get install launch-control-tool python-django python-django-openid-auth python-docutils python-linaro-json python-django-testscenarios === removed file 'INSTALL' --- INSTALL 2010-09-30 08:46:06 +0000 +++ INSTALL 1970-01-01 00:00:00 +0000 @@ -1,76 +0,0 @@ -Installation -============ - -There are two possible options for installation right now: - -1) Run directly from the checkout (development and evaluation) -2) Install in /opt + /srv and configure to run via apache (production) - -The first option is attractive to anyone who just wants to try it out without -any hassle. The second option should be used if you plan on having a -continuous service. - - -Running directly from a checkout -================================ - -There is very little you have to do, assuming you already have a checkout (if -you are reading this online and have bazaar installed you can get the latest -stable source directly from trunk with `bzr get lp:launch-control') you only -need to make sure you have required dependencies (see README) - -From within the source tree issue the following commands: -1) ./dashboard_server/manage.py syncdb -2) ./dashboard_server/manage.py runserver - -Then open your favourite browser and point it at http://localhost:8000/ - - -Installation in /opt + /srv -=========================== - -The following script is suitable for installation in /opt (code & settings) -and /srv (data). Tthe script is meant to be read and executed manually, you -need to interact with some steps - -# Setup space for code and data and fetch latest tree -sudo mkdir -p /opt/dashboard/ -sudo mkdir -p /srv/dashboard/media -sudo chown www-data.www-data /srv/dashboard/ -sudo bzr get lp:launch-control/0.1 /opt/dashboard/stable - -# Configure web server and dashboard for production deployment -sudo cp /opt/dashboard/stable/dashboard_server/local_settings.py.example /opt/dashboard/stable/dashboard_server/local_settings.py -# Things to do here: -# 1) specify system administrators -# 2) set SECRET_KEY to a random string -# 3) configure database settings (optional) -# 4) confirm installation and data paths (optional) -sudo $EDITOR /opt/dashboard/stable/dashboard_server/local_settings.py -# Note: here the system will interact with your database, if you configured -# something else than the default (sqlite) you must ensure that appropriate -# permissions are granted in advance. -# Note: if this is your first installation you will be prompted to create an -# administrator account. You should do so now. If you miss this step somehow -# you can issue 'createsuperuser' (instead of syncdb) command later. -sudo -u www-data /opt/dashboard/stable/dashboard_server/manage.py syncdb - -# Tweak to your preference, default is to have a *:80/dashboard/ virtual host -# Most likely you will want to change this, note that you _MUST_ -# change local_settings.py if you want to choose another location for -# the dashboard (eg http://hostname/ vs http://hostname/dashboard/) -sudo cp /opt/dashboard/stable/dashboard_server/apache.conf /etc/apache2/sites-available/dashboard -sudo $EDITOR /etc/apache2/sites-available/dashboard - -# Enable dashboard app and restart apache -sudo a2ensite dashboard -sudo service apache restart - - -First run -========= - -Now go to http://your-site/dashboard/admin and sign-in with the username and -password you provided at syncdb or createsuperuser step. Before the system can -be used you must create an anonymous bundle stream. You can do this by -selecting "Bundle Streams" "Add" and "Save" from the admin panel. === removed file 'MANIFEST.in' --- MANIFEST.in 2012-12-09 21:23:10 +0000 +++ MANIFEST.in 1970-01-01 00:00:00 +0000 @@ -1,12 +0,0 @@ -include COPYING.AGPL-3 -include HACKING -include INSTALL -include NEWS -include README -include setup-dev-env.sh -recursive-include dashboard_app/fixtures *.json -recursive-include dashboard_app/templates *.html *.txt -recursive-include dashboard_app/tests/regressions *.json -recursive-include dashboard_app/static *.png *.js *.css -recursive-include dashboard_app/templates *.html -recursive-include examples *.xml *.json *html === removed file 'NEWS' --- NEWS 2011-05-03 20:20:30 +0000 +++ NEWS 1970-01-01 00:00:00 +0000 @@ -1,119 +0,0 @@ -Release 0.4: - -Improvements to application core: - * Old reporting framework has been removed and replaced with new approach. - Old data sources have become data views, pure SQL-based construct. Old - reports have been converted from python applications to client-side - JavaScript snippets that can query data views via XML-RPC. Both reports and - data views are loaded from .xml files from configurable directories. - * Database schema is now managed by South, custom migrations are now possible - without dropping the database. - * Data security (a feature where uploaded content could be private) has been - removed due to complexity with providing security with anonymous SQL - queries. - * A number of XML-RPC methods has been added to implement data views. - -Improvements to user interface: - * The jQuery UI theme has been changed form smoothness to Aristo. This theme - is much more pleasant looking. - -Other changes: - * Initial release of jQuery API for Dashboard. - -Release 0.3: - -Improvements to test code: - * Tests are now separated to topic-driven modules, it is easier to develop and - review existing tests for specific parts of the application - * Tests are now based on django-testscenarios project (co-developed) that - allows to use test scenarios and other advanced features from - python-testtools and python-testscenarios. - -Improvements to application core: - * Bundles and Reports now use common privacy and ownership support code from - (co-developed) django-restricted-resources project. This allows objects to - be owned by a single user or by a group and allows application code to - clearly specify what kind of access should be granted to a particular object - and user. - * Support for importing Dashboard Bundle Format versions 1.0, 1.0.1, 1.1 and 1.2 - Apart from minor format improvements this adds support for binary attachments, - mime-type handling, tracking upstream projects with precise revision and optional - commit timestmap. This provides better meta-data (software context) to filter and - interpret tests results. - * Importing Dashboard Bundle Format documents is now assisted with - (co-developed) linaro-dashboard-bundle project that supports document format - evolution (upgrading older documents to more recent formats) and document - validation. Import error messages now contain precise JSON schema violation - description that is easy to track and confirm. - * Add support for PostgreSQL 8.4, this required a lot of small fixes where - SQLite was too forgiving and was not enforcing length limits that were set - in the model code. - * Add new reporting framework composed of reports and data sources. - This flexible framework (co-developed as Django-reports project) allows - third-party modules to extend Launch Control with new data sources - (encapsulated server side data mining) and reports (server side presentation - API that can tap into data sources) - * Add new and still experimental GCC benchmark report written based on - requests from Linaro Toolchain Working Group. This report provides - interactive 2D chart rendered based on test result measurements. - * Add a new XML-RPC call to create anonymous bundle streams - -Improvements to user interface: - * Unified sign-in with local user&pass and LaunchpadSSO (based on OpenID) - * DataBrowser feature has been dropped and replaced by manually constructed views. - This brings enormous usability improvements to various parts of the application. - * All pages now show meaningful breadcrumbs to simplify navigation - * It is now possible to view plain text attachments (log files) that accompany - test results. It is also possible to highlight a particular line from which - a test result was parsed. - * It is now possible to see custom attributes defined for either test run or - test result. - * The user interface now works correctly and looks similar on all major web - browsers including Internet Explorer 6+, Mozilla Firefox 3.5+ and Google - Chrome. - * XML-RPC API page is now easier to read - - -Other changes: - * Launch Control will now use CIA (cia.vc) to keep track of development and - publish commit messages to #linaro - * Launch Control Tool (lc-tool) has been separated to a standalone project. - Code is now available at lp:launch-control-tool - * Launch Control now depends on (co-developed) linaro-json package for JSON - handling and validation - * Launch Control can now be deployed on Ubuntu from a semi-official PPA, a lot - of effort has been made to facilitate deployment, including ongoing - specification of Django application and project packaging for Debian and - co-developed django-debian project with deeper Debian administration and - maintainer script support. - * The database schema has been changed significantly. There is no support for - automatically migrating data from 0.2 to 0.3. To retain your data export all - the bundles (lc-tool get) and re-import them to a fresh instance (lc-tool - put). After 0.3 we promise to deliver backwards compatible schema changes - and support for automatic database migration. - * Launch Control now depends on (co-developed) versiontools to accurately - track development project version and expose this as internal API. This - makes it easier to create development snapshots and identify application - screen-shots (as the version is displayed in the header) - * It's much easier to create a development environment composed of a running - dashboard instance (based on either SQLite or PostgreSQL) and some example - data using the new setup-dev-env.sh script. - * Launch Control now requires Django 1.2. This adds better security against - Cross Site Request Forgery attacks, simplifies the codebase and consolidates - development effort on a single version of key technology. In addition some - template language improvements in Django 1.2 make templates much easier to - write (especially the improvement {% for %} tag and vastly improved {% if %} - tag. In the future we will also support Django 1.3. - * Launch Control now makes a distinction between static content that is a part - of the source tree and static user-uploaded content. This simplifies - deployment on production web servers and provides a clear upgrade path for - Django 1.3 that supports this feature out of the box. - -The following bugs were fixed in this release: - -#744922 Unable to import SoftwarePackage with version longer than 32 characters -#740591 Incorrect description of various stream types in the bundle stream detail page -#740595 XML-RPCAPI view should have horizontal lines to delimit function blocks -#740634 "Add test run" form "Time check performed" needs explanation -#740638 "Add test case" form field "Units" in admin interface needs documentation -#740639 "Relative index" field on "Add test result" admin form is not documented === removed file 'README' --- README 2011-05-18 23:48:56 +0000 +++ README 1970-01-01 00:00:00 +0000 @@ -1,103 +0,0 @@ -Deployment instructions -======================= - -Currently deployment is supported on Ubuntu Lucid/Maverick with sqlite and -apache. Using other databases is likely to work but it was not tested for this -release. - -Dashboard Requirements (debian package names, see setup.py meta-data for details and versions): - * python-django - * python-django-openid-auth - * python-docutils - * python-linaro-json - * python-linaro-dashboard-bundle - * python-django-pagination - -For testing/packaging also install: - * python-django-testscenarios - -Installation -============ - -See INSTALL - -Reporting Bugs -============== - -All bugs should be reported to the launchpad project at -https://bugs.launchpad.net/launch-control/+filebug - -Known Issues -============ - -1. Django 1.1 present on Ubuntu 10.04.1 LTS and possibly other installations -suffers from a bug that prevents tests for django.contrib.auth to work -correctly. This issue is has been reported and is tracked inside Launchpad: -https://bugs.edge.launchpad.net/ubuntu/+source/python-django/+bug/650473 - - -Securing data views -=================== - -Data views are essentially arbitrary SQL queries performed by the database -engine that are exposed to untrusted users. In all but extremely simple cases -data views should be sand-boxed at database level to prevent data leaks or data -loss. - -Sand-boxing prevents the user invoking the query (as understood by the database -engine) from altering the data and constrains the tables and columns the user -can reference. - -Currently this feature is only available when using PostgreSQL backend. To -enable it run the following set of queries as the database administrator. - -We first have to create a role (user) that will be used for dataview queries. -The name of that user is derived from the name of the user owning the primary -connection suffixed with "_dataview". Here, since we are using default -deployment, the user is called "launchcontrol_dataview". - -The user must have the same password as the primary user. You can reference -/etc/launch-control/default_database.conf for the value you are using. - -launchcontrol=# CREATE ROLE launchcontrol_dataview WITH OPTION LOGIN, PASSWORD {password}; - -By default this new role has no permissions to do anything. We must explicitly -grant each right. We'll allow selecting data from two tables outside of the -dashboard. Content types are a part of Django implementation details and do -not contain any private data. The user table will allow queries to resolve user -primary key to a username. - -launchcontrol=# GRANT SELECT (username, id) ON TABLE auth_user TO launchcontrol_dataview; -launchcontrol=# GRANT SELECT ON TABLE django_content_type TO launchcontrol_dataview; - -This step is larger, we explicitly allow selecting data from all the dashboard -tables: - -launchcontrol=# GRANT SELECT ON TABLE - dashboard_app_bundle, - dashboard_app_bundlestream, - dashboard_app_hardwaredevice, - dashboard_app_namedattribute, - dashboard_app_softwarepackage, - dashboard_app_softwaresource, - dashboard_app_test, - dashboard_app_testcase, - dashboard_app_testresult, - dashboard_app_testrun, - dashboard_app_testrun_devices, - dashboard_app_testrun_packages, - dashboard_app_testrun_sources -TO launchcontrol_dataview; - -Finally we need to create or edit a small configuration file to make the -dashboard use the constrained role. Since we are using django-debian many -configuration variables traditionally configured via 'settings.py' can be -defined in /etc/launch-control/settings.conf. By default that file is not -created. You should create it and place following text inside: - -{ - "use_dataview_database": true -} - -That's it. Now restart the application and check that your data views still -work. === added file 'README.obsolete.txt' --- README.obsolete.txt 1970-01-01 00:00:00 +0000 +++ README.obsolete.txt 2013-09-19 17:47:28 +0000 @@ -0,0 +1,3 @@ +This package is obsolete. + +See http://git.linaro.org/gitweb?p=lava/lava-dashboard.git instead === removed file 'TODO' --- TODO 2011-03-14 16:25:48 +0000 +++ TODO 1970-01-01 00:00:00 +0000 @@ -1,2 +0,0 @@ -Things to solve sometime: - * Silence the logging in "internal boom" test that shows up every single time === removed directory 'assets.src' === removed file 'assets.src/icons.xcf' Binary files assets.src/icons.xcf 2010-12-20 11:48:23 +0000 and assets.src/icons.xcf 1970-01-01 00:00:00 +0000 differ === removed directory 'contrib' === removed file 'contrib/install.sh' --- contrib/install.sh 2010-12-13 11:18:32 +0000 +++ contrib/install.sh 1970-01-01 00:00:00 +0000 @@ -1,84 +0,0 @@ -#!/bin/bash -export LANG=C - -function get_deps() { - echo "Inspecting your system to determine dependencies" - - case "$(lsb_release -i -s)" in - Ubuntu) - ;; - - *) - echo "Your distribution is not supported" - exit 1 - ;; - esac - - case "$(lsb_release -r -s)" in - 10.04) - SERVER_PKGS="python-django python-docutils python-simplejson" - CLIENT_PKGS="python-argparse" - TEST_PKGS="python-testscenarios python-setuptools python-coverage" - ;; - - *) - echo "This release of ubuntu is not supported" - exit 1 - esac -} - -function get_yes_no() { - local question="$1" - local default="${2:-y}" - local answer - while [ "x$answer" != "xy" -a "x$answer" != "xn" ]; do - read -p "$question [y/n, default $default] " answer - if [ "x$answer" = "x" ]; then - answer="$default" - fi - done - echo $answer -} - - -function install_deps() { - get_deps - - if [ "$(get_yes_no "Do you want to install dependencies for the server?")" = "y" ]; then - PKGS="$PKGS $SERVER_PKGS" - fi - if [ "$(get_yes_no "Do you want to install dependencies for the client?")" = "y" ]; then - PKGS="$PKGS $CLIENT_PKGS" - fi - if [ "$(get_yes_no "Do you want to install dependencies for the test suite?")" = "y" ]; then - PKGS="$PKGS $TEST_PKGS" - fi - - echo "About to install the following packages" - IFS=" " - for pkg in $PKGS; do - echo " * $pkg" - done - go=$(get_yes_no "Is this correct?" n) - - if [ "$go" = "y" ]; then - sudo apt-get install $PKGS - fi -} - - -function main() { - echo "This script will help you to install launch-control on your system" - echo "Currently it can only install the required dependencies" - - if [ "$(get_yes_no "Do you want to continue?")" != "y" ]; then - exit - fi - - install_deps - -} - - -main - === removed file 'contrib/virtualenv-install.sh' --- contrib/virtualenv-install.sh 2011-01-10 09:39:19 +0000 +++ contrib/virtualenv-install.sh 1970-01-01 00:00:00 +0000 @@ -1,15 +0,0 @@ -#!/bin/sh -set -e -virtualenv --no-site-packages --clear /tmp/foo -. /tmp/foo/bin/activate -# 3rd party dependencies -pip install simplejson django python-openid django-openid-auth django-pagination docutils -# For launch-control itself -pip install versiontools -pip install linaro-json -pip install linaro-dashboard-bundle -pip install django-restricted-resource -# For testing -pip install django-testscenarios -# Client side tools -pip install launch-control-tool === removed directory 'dashboard_app' === removed file 'dashboard_app/__init__.py' --- dashboard_app/__init__.py 2013-01-15 21:40:20 +0000 +++ dashboard_app/__init__.py 1970-01-01 00:00:00 +0000 @@ -1,23 +0,0 @@ -# Copyright (C) 2010-2011 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - -""" -Dashboard Application (package) -""" - -__version__ = (0, 29, 0, "final", 0) === removed file 'dashboard_app/admin.py' --- dashboard_app/admin.py 2013-04-01 08:50:05 +0000 +++ dashboard_app/admin.py 1970-01-01 00:00:00 +0000 @@ -1,228 +0,0 @@ -# Copyright (C) 2010 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - -""" -Administration interface of the Dashboard application -""" - -from django import forms -from django.contrib import admin -from django.contrib.admin.actions import delete_selected -from django.contrib.contenttypes import generic -from django.utils.translation import ugettext as _ - -from dashboard_app.models import ( - Attachment, - Bundle, - BundleDeserializationError, - BundleStream, - HardwareDevice, - Image, - ImageSet, - LaunchpadBug, - NamedAttribute, - PMQABundleStream, - SoftwarePackage, - SoftwareSource, - Tag, - Test, - TestCase, - TestResult, - TestRun, - TestRunFilter, - TestRunFilterAttribute, - TestRunFilterSubscription, - TestDefinition, -) - - -class BundleAdmin(admin.ModelAdmin): - - def bundle_stream_pathname(self, bundle): - return bundle.bundle_stream.pathname - bundle_stream_pathname.short_description = _("Bundle stream") - - list_display = ('bundle_stream_pathname', 'content_filename', - 'uploaded_by', 'uploaded_on', 'is_deserialized') - list_filter = ('bundle_stream',) - readonly_fields = ('is_deserialized',) - date_hierarchy = 'uploaded_on' - fieldsets = ( - ('Document', { - 'fields': ('_raw_content', '_gz_content', 'content_filename')}), - ('Upload Details', { - 'fields': ('bundle_stream', 'uploaded_by')}), - ('Deserialization', { - 'fields': ('is_deserialized',)}), - ) - - -class BundleDeserializationErrorAdmin(admin.ModelAdmin): - list_display = ('bundle', 'error_message') - search_fields = ('bundle__content_sha1',) - - -class BundleStreamAdminForm(forms.ModelForm): - class Meta: - model = BundleStream - - def clean(self): - cleaned_data = self.cleaned_data - if (cleaned_data.get('user', '') is not None and - cleaned_data.get('group') is not None): - raise forms.ValidationError('BundleStream cannot have both user ' - 'and name set at the same time') - return super(BundleStreamAdminForm, self).clean() - - -def cleanup_bundle_stream_selected(modeladmin, request, queryset): - """ - This action cleans up the bundles from a bundle stream, without remove - the bundle stream itself. - """ - my_modeladmin = BundleAdmin(Bundle, modeladmin.admin_site) - my_modeladmin.delete_selected_confirmation_template = 'admin/dashboard_app/cleanup_selected_bundle_confirmation.html' - my_queryset = None - if request.POST.get('post'): # handle bundles - selected_bundles = request.POST.getlist('_selected_action') - my_queryset = Bundle.objects.filter(pk__in=selected_bundles) - else: # handle bundle streams - for bundle_stream in queryset: - if my_queryset is None: - my_queryset = bundle_stream.bundles.all() - else: - my_queryset = my_queryset | bundle_stream.bundles.all() - return delete_selected(my_modeladmin, request, my_queryset) -cleanup_bundle_stream_selected.short_description = "Clean up selected %(verbose_name_plural)s" - - -class BundleStreamAdmin(admin.ModelAdmin): - actions = [cleanup_bundle_stream_selected] - form = BundleStreamAdminForm - list_display = ('pathname', 'user', 'group', 'slug', 'is_public', 'is_anonymous', 'name') - list_filter = ('is_public', 'is_anonymous') - prepopulated_fields = {"slug": ("name",)} - readonly_fields = ('pathname',) - fieldsets = ( - ('Name and description', { - 'fields': ('name', 'slug', 'pathname')}), - ('Ownership', { - 'fields': ('user', 'group')}), - ('Access Rights', { - 'fields': ('is_public', 'is_anonymous')}), - ) - - -class SoftwarePackageAdmin(admin.ModelAdmin): - list_display = ('name', 'version') - search_fields = ('name', 'version') - - -class SoftwareSourceAdmin(admin.ModelAdmin): - list_display = ('project_name', 'branch_url', 'branch_vcs', - 'branch_revision', 'commit_timestamp') - list_filter = ('project_name',) - search_fields = ('project_name', 'branch_url') - - -class HardwareDeviceAdmin(admin.ModelAdmin): - class NamedAttributeInline(generic.GenericTabularInline): - model = NamedAttribute - list_display = ('description', 'device_type') - list_filter = ('device_type',) - search_fields = ('description',) - inlines = [NamedAttributeInline] - - -class TestCaseAdmin(admin.ModelAdmin): - list_display = ('test_case_id', 'test',) - list_filter = ('test',) - - -class TestAdmin(admin.ModelAdmin): - pass - - -class TestResultAdmin(admin.ModelAdmin): - class NamedAttributeInline(generic.GenericTabularInline): - model = NamedAttribute - list_display = ('__unicode__', 'test', 'test_case', 'result', 'measurement') - list_filter = ('test_case', 'result') - inlines = [NamedAttributeInline] - - -class TestRunAdmin(admin.ModelAdmin): - class NamedAttributeInline(generic.GenericTabularInline): - model = NamedAttribute - list_filter = ('test'), - list_display = ( - 'test', - 'analyzer_assigned_uuid', - 'bundle', - 'analyzer_assigned_date', - 'import_assigned_date') - inlines = [NamedAttributeInline] - - -class ImageAdmin(admin.ModelAdmin): - save_as = True - - -class ImageSetAdmin(admin.ModelAdmin): - class Media: - css = { - "all": ("dashboard_app/css/wider-filter-horizontal.css",) - } - filter_horizontal = ['images'] - save_as = True - - -class LaunchpadBugAdmin(admin.ModelAdmin): - raw_id_fields = ['test_runs'] - - -class TestRunFilterAdmin(admin.ModelAdmin): - filter_horizontal = ['bundle_streams'] - class TestRunFilterAttributeInline(admin.TabularInline): - model = TestRunFilterAttribute - inlines = [TestRunFilterAttributeInline] - save_as = True - - -class TestDefinitionAdmin(admin.ModelAdmin): - list_display = ('name', 'version') - -admin.site.register(Attachment) -admin.site.register(Bundle, BundleAdmin) -admin.site.register(BundleDeserializationError, BundleDeserializationErrorAdmin) -admin.site.register(BundleStream, BundleStreamAdmin) -admin.site.register(HardwareDevice, HardwareDeviceAdmin) -admin.site.register(Image, ImageAdmin) -admin.site.register(ImageSet, ImageSetAdmin) -admin.site.register(LaunchpadBug, LaunchpadBugAdmin) -admin.site.register(PMQABundleStream) -admin.site.register(SoftwarePackage, SoftwarePackageAdmin) -admin.site.register(SoftwareSource, SoftwareSourceAdmin) -admin.site.register(Test, TestAdmin) -admin.site.register(TestCase, TestCaseAdmin) -admin.site.register(TestResult, TestResultAdmin) -admin.site.register(TestRun, TestRunAdmin) -admin.site.register(TestRunFilter, TestRunFilterAdmin) -admin.site.register(TestRunFilterSubscription) -admin.site.register(Tag) -admin.site.register(TestDefinition, TestDefinitionAdmin) === removed file 'dashboard_app/bread_crumbs.py' --- dashboard_app/bread_crumbs.py 2011-09-30 13:34:54 +0000 +++ dashboard_app/bread_crumbs.py 1970-01-01 00:00:00 +0000 @@ -1,26 +0,0 @@ -# Copyright (C) 2010 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - - -""" -Deprecated bread crumb module. - -Bread crubms are now part of lava server -""" - -from lava_server.bread_crumbs import BreadCrumb, LiveBreadCrumb, BreadCrumbTrail === removed file 'dashboard_app/extension.py' --- dashboard_app/extension.py 2013-09-13 13:13:30 +0000 +++ dashboard_app/extension.py 1970-01-01 00:00:00 +0000 @@ -1,104 +0,0 @@ -# Copyright (C) 2010 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - -import os - -from lava_server.extension import LavaServerExtension, Menu - - -class DashboardExtension(LavaServerExtension): - - @property - def app_name(self): - return "dashboard_app" - - @property - def name(self): - return "Dashboard" - - @property - def main_view_name(self): - return "dashboard_app.views.index" - - def get_menu(self): - from django.conf import settings - from django.core.urlresolvers import reverse - - menu = super(DashboardExtension, self).get_menu() - subm = [] - menu.sub_menu = subm - subm.append(Menu("Image Reports", reverse("dashboard_app.views.images.image_report_list"))) - subm.append(Menu("Filters", reverse("dashboard_app.views.filters.views.filters_list"))) - subm.append(Menu("Bundle Streams", reverse("dashboard_app.views.bundle_stream_list"))) - if not settings.DATAVIEW_HIDE: - subm.append(Menu("Data Views", reverse("dashboard_app.views.data_view_list"))) - if not settings.DATAREPORTS_HIDE: - subm.append(Menu("Reports", reverse("dashboard_app.views.report_list"))) - subm.append(Menu("Test Definitions", reverse("dashboard_app.views.test_definition"))) - subm.append(Menu("PM-QA", reverse("dashboard_app.views.pmqa.pmqa_view"))) - - return menu - - @property - def description(self): - return "Validation Dashboard" - - @property - def version(self): - import dashboard_app - import versiontools - return versiontools.format_version(dashboard_app.__version__, hint=dashboard_app) - - @property - def api_class(self): - from dashboard_app.xmlrpc import DashboardAPI - return DashboardAPI - - def contribute_to_settings(self, settings_module): - super(DashboardExtension, self).contribute_to_settings(settings_module) - settings_module['INSTALLED_APPS'].append("linaro_django_pagination") - settings_module['MIDDLEWARE_CLASSES'].append( - 'linaro_django_pagination.middleware.PaginationMiddleware') - root_dir = os.path.normpath(os.path.join(os.path.dirname(__file__), "..")) - settings_module['DATAVIEW_DIRS'] = [ - os.path.join(root_dir, 'examples', 'views'), - os.path.join(root_dir, 'production', 'views')] - settings_module['DATAREPORT_DIRS'] = [ - os.path.join(root_dir, 'examples', 'reports'), - os.path.join(root_dir, 'production', 'reports')] - prepend_label_apps = settings_module.get('STATICFILES_PREPEND_LABEL_APPS', []) - if self.app_name in prepend_label_apps: - prepend_label_apps.remove(self.app_name) - - def contribute_to_settings_ex(self, settings_module, settings_object): - settings_module['DATAVIEW_DIRS'] = settings_object._settings.get( - "DATAVIEW_DIRS", []) - settings_module['DATAVIEW_HIDE'] = settings_object._settings.get( - "DATAVIEW_HIDE", False) - settings_module['DATAREPORT_DIRS'] = settings_object._settings.get( - "DATAREPORT_DIRS", []) - settings_module['DATAREPORTS_HIDE'] = settings_object._settings.get( - "DATAREPORTS_HIDE", False) - - # Enable constrained dataview database if requested - if settings_object._settings.get("use_dataview_database"): - # Copy everything from the default database and append _dataview to user - # name. The rest is out of scope (making sure it's actually setup - # properly, having permissions to login, permissions to view proper data) - settings_module['DATABASES']['dataview'] = dict(settings_module['DATABASES']['default']) - settings_module['DATABASES']['dataview']['USER'] += "_dataview" === removed file 'dashboard_app/filters.py' --- dashboard_app/filters.py 2013-01-09 00:15:10 +0000 +++ dashboard_app/filters.py 1970-01-01 00:00:00 +0000 @@ -1,420 +0,0 @@ - -# A test run filter allows a user to produce an ordered list of results of -# interest. - -# The data that makes up a filter are: -# -# * A non-empty set of bundle streams -# * A possibly empty set of (attribute-name, attribute-value) pairs -# * A possibly empty list of tests, each of which has a possibly empty list of -# test cases -# * An optional build number attribute name - -# A filter matches a test run if: -# -# * It is part of a bundle that is in one of the specified streams -# * It has all the attribute names with the specified values (or there are no -# attributes specified) -# * The test of the test run is one of those specified (or there are no test -# runs specified) -# * One of the results of the test run is one of those specified (or there are -# no test cases specified) -# * The build number attribute is present, if specified. -# -# The test runs matching a filter are grouped, either by the upload date of -# the bundle or by the value of the build number attribute. - -# We define several representations for this data: -# -# * One is the TestRunFilter and related tables (the "model represenation"). -# These have some representation specific metadata that does not relate to -# the test runs the filter selects: names, owner, the "public" flag. - -# * One is the natural Python data structure for the data (the "in-memory -# representation"), i.e. -# { -# bundle_streams: [], -# attributes: [(attr-name, attr-value)], -# tests: [{"test": , "test_cases":[]}], -# build_number_attribute: attr-name-or-None, -# uploaded_by: , -# } -# This is the representation that is used to evaluate a filter (so that -# previewing new filters can be done without having to create a -# TestRunFilter instance that we carefully don't save to the database -- -# which doesn't work very well anyway with all the ManyToMany relations -# involved) - -# * The final one is the TRFForm object defined in -# dashboard_app.views.filters.forms (the "form representation") -# (pedantically, the rendered form of this is yet another -# representation...). This representation is the only one other than the -# model objects to include the name/owner/public metadata. - -# evaluate_filter returns a sort of fake QuerySet. Iterating over it returns -# "FilterMatch" objects, whose attributes are described in the class -# defintion. A FilterMatch also has a serializable representation: -# -# { -# 'tag': either a stringified date (bundle__uploaded_on) or a build number -# 'test_runs': [{ -# 'test_id': test_id -# 'link': link-to-test-run, -# 'passes': int, 'fails': int, 'skips': int, 'total': int, -# # only present if filter specifies cases for this test: -# 'specific_results': [{ -# 'test_case_id': test_case_id, -# 'link': link-to-test-result, -# 'result': pass/fail/skip/unknown, -# 'measurement': string-containing-decimal-or-None, -# 'units': units, -# }], -# }] -# # Only present if filter does not specify tests: -# 'pass_count': int, -# 'fail_count': int, -# } - -import datetime - -from django.contrib.contenttypes.models import ContentType -from django.contrib.sites.models import Site -from django.core.exceptions import ImproperlyConfigured -from django.db import models -from django.db.models.sql.aggregates import Aggregate as SQLAggregate - -from dashboard_app.models import ( - BundleStream, - NamedAttribute, - TestResult, - TestRun, - ) - - -class FilterMatch(object): - """A non-database object that represents the way a filter matches a test_run. - - Returned by TestRunFilter.matches_against_bundle and evaluate_filter. - """ - - filter = None # The model representation of the filter (this is only set - # by matches_against_bundle) - filter_data = None # The in-memory representation of the filter. - tag = None # either a date (bundle__uploaded_on) or a build number - - test_runs = None # Will be all test runs from the bundle if - # filter_data['tests'] is empty, will just be the test - # runs with matching tests if not. - - specific_results = None # Will stay none unless filter specifies a test case - - pass_count = None # Only filled out for filters that dont specify a test - result_count = None # Ditto - - def serializable(self, include_links=True): - cases_by_test = {} - for test in self.filter_data['tests']: - # Not right if filter specifies a test more than once... - if test['test_cases']: - cases_by_test[test['test']] = test['test_cases'] - test_runs = [] - - domain = '???' - try: - site = Site.objects.get_current() - except (Site.DoesNotExist, ImproperlyConfigured): - pass - else: - domain = site.domain - url_prefix = 'http://%s' % domain - - for tr in self.test_runs: - d = { - 'test_id': tr.test.test_id, - 'pass': 0, - 'fail': 0, - 'skip': 0, - 'unknown': 0, - 'total': 0, - } - if include_links: - d['link'] = url_prefix + tr.get_absolute_url() - if tr.test in cases_by_test: - results = d['specific_results'] = [] - for result in self.specific_results: - if result.test_run == tr: - result_str = TestResult.RESULT_MAP[result.result] - result_data = { - 'test_case_id': result.test_case.test_case_id, - 'result': result_str, - } - if include_links: - result_data['link'] = url_prefix + result.get_absolute_url() - if result.measurement is not None: - result_data['measurement'] = str(result.measurement) - if result.units is not None: - result_data['units'] = str(result.units) - results.append(result_data) - d[result_str] += 1 - d['total'] += 1 - else: - d['pass'] = tr.denormalization.count_pass - d['fail'] = tr.denormalization.count_fail - d['skip'] = tr.denormalization.count_skip - d['unknown'] = tr.denormalization.count_unknown - d['total'] = tr.denormalization.count_all() - test_runs.append(d) - r = { - 'tag': str(self.tag), - 'test_runs': test_runs, - } - if self.pass_count is not None: - r['pass_count'] = self.pass_count - if self.result_count is not None: - r['result_count'] = self.result_count - return r - - def _format_test_result(self, result): - prefix = result.test_case.test.test_id + ':' + result.test_case.test_case_id + ' ' - if result.test_case.units: - return prefix + '%s%s' % (result.measurement, result.units) - else: - return prefix + result.RESULT_MAP[result.result] - - def _format_test_run(self, tr): - return "%s %s pass / %s total" % ( - tr.test.test_id, - tr.denormalization.count_pass, - tr.denormalization.count_all()) - - def _format_many_test_runs(self): - return "%s pass / %s total" % (self.pass_count, self.result_count) - - def format_for_mail(self): - r = [' ~%s/%s ' % (self.filter.owner.username, self.filter.name)] - if not self.filter_data['tests']: - r.append(self._format_many_test_runs()) - else: - for test in self.filter_data['tests']: - if not test['test_cases']: - for tr in self.test_runs: - if tr.test == test.test: - r.append('\n ') - r.append(self._format_test_run(tr)) - for test_case in test['test_cases']: - for result in self.specific_results: - if result.test_case.id == test_case.id: - r.append('\n ') - r.append(self._format_test_result(result)) - r.append('\n') - return ''.join(r) - - -class MatchMakingQuerySet(object): - """Wrap a QuerySet and construct FilterMatchs from what the wrapped query - set returns. - - Just enough of the QuerySet API to work with DataTable (i.e. pretend - ordering and real slicing).""" - - model = TestRun - - def __init__(self, queryset, filter_data, prefetch_related): - self.queryset = queryset - self.filter_data = filter_data - self.prefetch_related = prefetch_related - if filter_data.get('build_number_attribute'): - self.key = 'build_number' - self.key_name = 'Build' - else: - self.key = 'bundle__uploaded_on' - self.key_name = 'Uploaded On' - - def _makeMatches(self, data): - test_run_ids = set() - for datum in data: - test_run_ids.update(datum['id__arrayagg']) - r = [] - trs = TestRun.objects.filter(id__in=test_run_ids).select_related( - 'denormalization', 'bundle', 'bundle__bundle_stream', 'test').prefetch_related( - *self.prefetch_related) - trs_by_id = {} - for tr in trs: - trs_by_id[tr.id] = tr - case_ids = set() - for t in self.filter_data['tests']: - for case in t['test_cases']: - case_ids.add(case.id) - if case_ids: - result_ids_by_tr_id = {} - results_by_tr_id = {} - values = TestResult.objects.filter( - test_case__id__in=case_ids, - test_run__id__in=test_run_ids).values_list( - 'test_run__id', 'id') - result_ids = set() - for v in values: - result_ids_by_tr_id.setdefault(v[0], []).append(v[1]) - result_ids.add(v[1]) - - results_by_id = {} - for result in TestResult.objects.filter( - id__in=list(result_ids)).select_related( - 'test', 'test_case', 'test_run__bundle__bundle_stream'): - results_by_id[result.id] = result - - for tr_id, result_ids in result_ids_by_tr_id.items(): - rs = results_by_tr_id[tr_id] = [] - for result_id in result_ids: - rs.append(results_by_id[result_id]) - for datum in data: - trs = [] - for tr_id in set(datum['id__arrayagg']): - trs.append(trs_by_id[tr_id]) - match = FilterMatch() - match.test_runs = trs - match.filter_data = self.filter_data - match.tag = datum[self.key] - if case_ids: - match.specific_results = [] - for tr_id in set(datum['id__arrayagg']): - match.specific_results.extend(results_by_tr_id.get(tr_id, [])) - else: - match.pass_count = sum(tr.denormalization.count_pass for tr in trs) - match.result_count = sum(tr.denormalization.count_all() for tr in trs) - r.append(match) - return iter(r) - - def _wrap(self, queryset, **kw): - return self.__class__(queryset, self.filter_data, self.prefetch_related, **kw) - - def order_by(self, *args): - # the generic tables code calls this even when it shouldn't... - return self - - def since(self, since): - if self.key == 'build_number': - q = self.queryset.extra( - where=['convert_to_integer("dashboard_app_namedattribute"."value") > %d' % since] - ) - else: - assert isinstance(since, datetime.datetime) - q = self.queryset.filter(bundle__uploaded_on__gt=since) - return self._wrap(q) - - def with_tags(self, tag1, tag2): - if self.key == 'build_number': - q = self.queryset.extra( - where=['convert_to_integer("dashboard_app_namedattribute"."value") in (%s, %s)' % (tag1, tag2)] - ) - else: - tag1 = datetime.datetime.strptime(tag1, "%Y-%m-%d %H:%M:%S.%f") - tag2 = datetime.datetime.strptime(tag2, "%Y-%m-%d %H:%M:%S.%f") - q = self.queryset.filter(bundle__uploaded_on__in=(tag1, tag2)) - matches = list(self._wrap(q)) - if matches[0].tag == tag1: - return matches - else: - matches.reverse() - return matches - - def count(self): - return self.queryset.count() - - def __getitem__(self, item): - return self._wrap(self.queryset[item]) - - def __iter__(self): - data = list(self.queryset) - return self._makeMatches(data) - - -class SQLArrayAgg(SQLAggregate): - sql_function = 'array_agg' - - -class ArrayAgg(models.Aggregate): - name = 'ArrayAgg' - def add_to_query(self, query, alias, col, source, is_summary): - aggregate = SQLArrayAgg( - col, source=source, is_summary=is_summary, **self.extra) - # For way more detail than you want about what this next line is for, - # see - # http://voices.canonical.com/michael.hudson/2012/09/02/using-postgres-array_agg-from-django/ - aggregate.field = models.DecimalField() # vomit - query.aggregates[alias] = aggregate - - -# given filter: -# select from testrun -# where testrun.bundle in filter.bundle_streams ^ accessible_bundles -# and testrun has attribute with key = key1 and value = value1 -# and testrun has attribute with key = key2 and value = value2 -# and ... -# and testrun has attribute with key = keyN and value = valueN -# and testrun has any of the tests/testcases requested -# [and testrun has attribute with key = build_number_attribute] -# [and testrun.bundle.uploaded_by = uploaded_by] -def evaluate_filter(user, filter_data, prefetch_related=[], descending=True): - accessible_bundle_streams = BundleStream.objects.accessible_by_principal( - user) - bs_ids = list( - accessible_bundle_streams.filter( - id__in=[bs.id for bs in filter_data['bundle_streams']]).values_list('id', flat=True)) - conditions = [models.Q(bundle__bundle_stream__id__in=bs_ids)] - - content_type_id = ContentType.objects.get_for_model(TestRun).id - - for (name, value) in filter_data['attributes']: - # We punch through the generic relation abstraction here for 100x - # better performance. - conditions.append( - models.Q(id__in=NamedAttribute.objects.filter( - name=name, value=value, content_type_id=content_type_id - ).values('object_id'))) - - test_condition = None - for test in filter_data.get('tests', []): - case_ids = set() - for test_case in test.get('test_cases', []): - case_ids.add(test_case.id) - if case_ids: - q = models.Q( - test__id=test['test'].id, - test_results__test_case__id__in=case_ids) - else: - q = models.Q(test__id=test['test'].id) - if test_condition: - test_condition = test_condition | q - else: - test_condition = q - if test_condition: - conditions.append(test_condition) - - if filter_data.get('uploaded_by'): - conditions.append(models.Q(bundle__uploaded_by=filter_data['uploaded_by'])) - - testruns = TestRun.objects.filter(*conditions) - - if filter_data.get('build_number_attribute'): - if descending: - ob = ['-build_number'] - else: - ob = ['build_number'] - testruns = testruns.filter( - attributes__name=filter_data['build_number_attribute']).extra( - select={ - 'build_number': 'convert_to_integer("dashboard_app_namedattribute"."value")', - }, - where=['convert_to_integer("dashboard_app_namedattribute"."value") IS NOT NULL']).extra( - order_by=ob, - ).values('build_number').annotate(ArrayAgg('id')) - else: - if descending: - ob = '-bundle__uploaded_on' - else: - ob = 'bundle__uploaded_on' - testruns = testruns.order_by(ob).values( - 'bundle__uploaded_on').annotate(ArrayAgg('id')) - - return MatchMakingQuerySet(testruns, filter_data, prefetch_related) === removed directory 'dashboard_app/fixtures' === removed file 'dashboard_app/fixtures/hacking_admin_user.json' --- dashboard_app/fixtures/hacking_admin_user.json 2010-12-20 09:45:31 +0000 +++ dashboard_app/fixtures/hacking_admin_user.json 1970-01-01 00:00:00 +0000 @@ -1,20 +0,0 @@ -[ - { - "pk": 1, - "model": "auth.user", - "fields": { - "username": "admin", - "first_name": "", - "last_name": "", - "is_active": true, - "is_superuser": true, - "is_staff": true, - "last_login": "2010-12-17 15:51:51", - "groups": [], - "user_permissions": [], - "password": "sha1$851de$ff65ef6a15636d06c2bf084ef9f5f78c51bca4d5", - "email": "admin@example.org", - "date_joined": "2010-12-17 15:51:32" - } - } -] === removed file 'dashboard_app/fixtures/hacking_gcc_bundle_stream.json' --- dashboard_app/fixtures/hacking_gcc_bundle_stream.json 2011-03-18 12:28:50 +0000 +++ dashboard_app/fixtures/hacking_gcc_bundle_stream.json 1970-01-01 00:00:00 +0000 @@ -1,15 +0,0 @@ -[ - { - "pk": 2, - "model": "dashboard_app.bundlestream", - "fields": { - "pathname": "/anonymous/gcc/", - "group": null, - "user": 1, - "name": "Sample benchmark data from Linaro Toolchain Working Group", - "slug": "gcc", - "is_public": true, - "is_anonymous": true - } - } -] === removed file 'dashboard_app/fixtures/hacking_initial_bundle_stream.json' --- dashboard_app/fixtures/hacking_initial_bundle_stream.json 2011-02-04 15:23:15 +0000 +++ dashboard_app/fixtures/hacking_initial_bundle_stream.json 1970-01-01 00:00:00 +0000 @@ -1,15 +0,0 @@ -[ - { - "pk": 1, - "model": "dashboard_app.bundlestream", - "fields": { - "pathname": "/anonymous/", - "group": null, - "user": 1, - "name": "", - "slug": "", - "is_public": true, - "is_anonymous": true - } - } -] === removed file 'dashboard_app/fixtures/hacking_localhost_site.json' --- dashboard_app/fixtures/hacking_localhost_site.json 2010-12-20 09:45:31 +0000 +++ dashboard_app/fixtures/hacking_localhost_site.json 1970-01-01 00:00:00 +0000 @@ -1,10 +0,0 @@ -[ - { - "pk": 1, - "model": "sites.site", - "fields": { - "domain": "localhost:8000", - "name": "localhost:8000" - } - } -] \ No newline at end of file === removed file 'dashboard_app/fixtures/test_run_detail.json' --- dashboard_app/fixtures/test_run_detail.json 2012-01-30 10:22:06 +0000 +++ dashboard_app/fixtures/test_run_detail.json 1970-01-01 00:00:00 +0000 @@ -1,285 +0,0 @@ -[ - { - "pk": 1, - "model": "dashboard_app.bundlestream", - "fields": { - "pathname": "/anonymous/", - "group": null, - "user": null, - "name": "anonymous", - "slug": "", - "is_public": true, - "is_anonymous": true - } - }, - { - "pk": 1, - "model": "dashboard_app.bundle", - "fields": { - "content_sha1": "e71c65065b18ede68b6512bf0d20790d06f718f2", - "bundle_stream": 1, - "uploaded_on": "2010-12-14 14:24:38", - "_raw_content": "bundles/bundle-1", - "uploaded_by": null, - "content_filename": "gmpbench1291774485.0", - "is_deserialized": true - } - }, - { - "pk": 1, - "model": "dashboard_app.test", - "fields": { - "test_id": "gmpbench", - "name": "" - } - }, - { - "pk": 1, - "model": "dashboard_app.testcase", - "fields": { - "test": 1, - "units": "operations/s", - "test_case_id": "GMPbenchbasemultiply", - "name": "" - } - }, - { - "pk": 2, - "model": "dashboard_app.testcase", - "fields": { - "test": 1, - "units": "operations/s", - "test_case_id": "GMPbenchbasedivide", - "name": "" - } - }, - { - "pk": 3, - "model": "dashboard_app.testcase", - "fields": { - "test": 1, - "units": "operations/s", - "test_case_id": "GMPbenchbasegcd", - "name": "" - } - }, - { - "pk": 4, - "model": "dashboard_app.testcase", - "fields": { - "test": 1, - "units": "operations/s", - "test_case_id": "GMPbenchbasegcdext", - "name": "" - } - }, - { - "pk": 5, - "model": "dashboard_app.testcase", - "fields": { - "test": 1, - "units": "operations/s", - "test_case_id": "GMPbenchbase", - "name": "" - } - }, - { - "pk": 6, - "model": "dashboard_app.testcase", - "fields": { - "test": 1, - "units": "operations/s", - "test_case_id": "GMPbenchapprsa", - "name": "" - } - }, - { - "pk": 7, - "model": "dashboard_app.testcase", - "fields": { - "test": 1, - "units": "operations/s", - "test_case_id": "GMPbenchapppi", - "name": "" - } - }, - { - "pk": 8, - "model": "dashboard_app.testcase", - "fields": { - "test": 1, - "units": "operations/s", - "test_case_id": "GMPbenchapp", - "name": "" - } - }, - { - "pk": 9, - "model": "dashboard_app.testcase", - "fields": { - "test": 1, - "units": "operations/s", - "test_case_id": "GMPbench", - "name": "" - } - }, - { - "pk": 1, - "model": "dashboard_app.testrun", - "fields": { - "sw_image_desc": "Ubuntu 10.04.1 LTS", - "analyzer_assigned_date": "2010-12-08 07:44:45", - "bundle": 1, - "time_check_performed": false, - "devices": [ ], - "analyzer_assigned_uuid": "19bbbb9a-02a0-11e0-b91e-0015587c0f4d", - "test": 1, - "import_assigned_date": "2010-12-14 14:24:39", - "packages": [ ] - } - }, - { - "pk": 1, - "model": "dashboard_app.testresult", - "fields": { - "test_run": 1, - "timestamp": null, - "microseconds": null, - "filename": null, - "lineno": null, - "measurement": "5413.4", - "message": null, - "test_case": 1, - "result": 0, - "relative_index": 1 - } - }, - { - "pk": 2, - "model": "dashboard_app.testresult", - "fields": { - "test_run": 1, - "timestamp": null, - "microseconds": null, - "filename": null, - "lineno": null, - "measurement": "3183.2", - "message": null, - "test_case": 2, - "result": 0, - "relative_index": 2 - } - }, - { - "pk": 3, - "model": "dashboard_app.testresult", - "fields": { - "test_run": 1, - "timestamp": null, - "microseconds": null, - "filename": null, - "lineno": null, - "measurement": "1196.3", - "message": null, - "test_case": 3, - "result": 0, - "relative_index": 3 - } - }, - { - "pk": 4, - "model": "dashboard_app.testresult", - "fields": { - "test_run": 1, - "timestamp": null, - "microseconds": null, - "filename": null, - "lineno": null, - "measurement": "728.05", - "message": null, - "test_case": 4, - "result": 0, - "relative_index": 4 - } - }, - { - "pk": 5, - "model": "dashboard_app.testresult", - "fields": { - "test_run": 1, - "timestamp": null, - "microseconds": null, - "filename": null, - "lineno": null, - "measurement": "2524.1", - "message": null, - "test_case": 5, - "result": 0, - "relative_index": 5 - } - }, - { - "pk": 6, - "model": "dashboard_app.testresult", - "fields": { - "test_run": 1, - "timestamp": null, - "microseconds": null, - "filename": null, - "lineno": null, - "measurement": "612.01", - "message": null, - "test_case": 6, - "result": 0, - "relative_index": 6 - } - }, - { - "pk": 7, - "model": "dashboard_app.testresult", - "fields": { - "test_run": 1, - "timestamp": null, - "microseconds": null, - "filename": null, - "lineno": null, - "measurement": "7.1672", - "message": null, - "test_case": 7, - "result": 0, - "relative_index": 7 - } - }, - { - "pk": 8, - "model": "dashboard_app.testresult", - "fields": { - "test_run": 1, - "timestamp": null, - "microseconds": null, - "filename": null, - "lineno": null, - "measurement": "66.23", - "message": null, - "test_case": 8, - "result": 0, - "relative_index": 8 - } - }, - { - "pk": 9, - "model": "dashboard_app.testresult", - "fields": { - "test_run": 1, - "timestamp": null, - "microseconds": null, - "filename": null, - "lineno": null, - "measurement": "408.87", - "message": null, - "test_case": 9, - "result": 0, - "relative_index": 9 - } - } -] === removed file 'dashboard_app/helpers.py' --- dashboard_app/helpers.py 2013-04-01 11:04:15 +0000 +++ dashboard_app/helpers.py 1970-01-01 00:00:00 +0000 @@ -1,851 +0,0 @@ -""" -Module with non-database helper classes -""" - -from uuid import UUID -import base64 -import logging -import time - -from django.core.files.base import ContentFile -from django.core.exceptions import ObjectDoesNotExist -from django.db import connection, transaction, IntegrityError -from linaro_dashboard_bundle.errors import DocumentFormatError -from linaro_dashboard_bundle.evolution import DocumentEvolution -from linaro_dashboard_bundle.io import DocumentIO -from json_schema_validator.extensions import datetime_extension, timedelta_extension - - -PROFILE_LOGGING = False - - -def is_postgres(): - return (connection.settings_dict['ENGINE'] - == 'django.db.backends.postgresql_psycopg2') - - -class IBundleFormatImporter(object): - """ - Interface for bundle format importers. - """ - - def import_document(self, s_bundle, doc): - """ - Import document in a supported format and tie it to the - specified server side DashboardBundle model (s_bundle) - - :Discussion: - Imports specified document in a supported format and tie it - to the specified server side DashboardBundle model - (s_bundle) - - :Return value: - None - - :Exceptions raised: - ValueError - TypeError - others (?) - """ - raise NotImplementedError(self.import_document) - - -class BundleFormatImporter_1_0(IBundleFormatImporter): - """ - IFormatImporter subclass capable of loading "Dashboard Bundle Format 1.0" - """ - - def import_document(self, s_bundle, doc): - """ - Import specified bundle document into the database. - """ - self._content_files = [] - self._import_sanity_check(doc) - try: - self._import_document_with_transaction(s_bundle, doc) - except IntegrityError: - self._remove_created_files() - raise - - def _remove_created_files(self): - """ - Remove any files that may have already been flushed to disk. Otherwise - the transaction handling should rollback anything evil that was - happening while we were here - """ - for content_file in self._content_files: - content_file.delete(save=False) - - def _import_sanity_check(self, doc): - """ - Sanity check before any import is attempted. - - This prevents InternalError (but is racy with other transactions). - Still it's a little bit better to report the exception raised below - rather than the IntegrityError that would have been raised otherwise. - - The code copes with both (using transactions around _import_document() - and _remove_created_files() that gets called if something is wrong) - """ - from dashboard_app.models import TestRun - - for test_run in doc.get("test_runs", []): - analyzer_assigned_uuid = test_run["analyzer_assigned_uuid"] - if TestRun.objects.filter( - analyzer_assigned_uuid=analyzer_assigned_uuid).exists(): - raise ValueError("A test with UUID {0} already exists".format(analyzer_assigned_uuid)) - - @transaction.commit_on_success - def _import_document_with_transaction(self, s_bundle, doc): - """ - Note: This function uses commit_on_success to ensure the database is in - a consistent state after IntegrityErrors that would clog the - transaction on pgsql. Since transactions will not rollback any files we - created in the meantime there is a helper that cleans attachments in - case something goes wrong - """ - self._import_document(s_bundle, doc) - - def _import_document(self, s_bundle, doc): - for c_test_run in doc.get("test_runs", []): - self._import_test_run(c_test_run, s_bundle) - - def __init__(self): - self._qc = 0 - self._time = time.time() - - def _log(self, method_name): - if PROFILE_LOGGING: - t = time.time() - self._time - if t > 0.1: - p = '**' - else: - p = ' ' - logging.warning( - '%s %s %.2f %d', p, method_name, t, - len(connection.queries) - self._qc) - self._qc = len(connection.queries) - self._time = time.time() - - def _import_test_run(self, c_test_run, s_bundle): - """ - Import TestRun - """ - from dashboard_app.models import TestRun - - s_test = self._import_test(c_test_run) - analyzer_assigned_uuid = UUID(c_test_run["analyzer_assigned_uuid"]) - s_test_run = TestRun.objects.create( - bundle = s_bundle, - test = s_test, - analyzer_assigned_uuid = str(analyzer_assigned_uuid), - analyzer_assigned_date = datetime_extension.from_json( - # required by schema - c_test_run["analyzer_assigned_date"]), - time_check_performed = ( - # required by schema - c_test_run["time_check_performed"]), - ) - # needed for foreign key models below - s_test_run.save() - # import all the bits and pieces - self._log('starting') - self._import_test_results(c_test_run, s_test_run) - self._log('results') - self._import_attachments(c_test_run, s_test_run) - self._log('attachments') - self._import_hardware_context(c_test_run, s_test_run) - self._log('hardware') - self._import_software_context(c_test_run, s_test_run) - self._log('software') - self._import_attributes(c_test_run, s_test_run) - self._log('attributes') - # collect all the changes that happen before the previous save - s_test_run.save() - s_test_run.denormalize() - return s_test_run - - def _import_software_context(self, c_test_run, s_test_run): - """ - Import software context. - - In format 1.0 that's just a list of packages and software image - description - """ - self._import_packages(c_test_run, s_test_run) - s_test_run.sw_image_desc = self._get_sw_context(c_test_run).get( - "sw_image", {}).get("desc", "") - - def _import_hardware_context(self, c_test_run, s_test_run): - """ - Import hardware context. - - In format 1.0 that's just a list of devices - """ - self._import_devices(c_test_run, s_test_run) - - def _import_test(self, c_test_run): - """ - Import dashboard_app.models.Test into the database - based on a client-side description of a TestRun - """ - from dashboard_app.models import Test - - s_test, test_created = Test.objects.get_or_create( - test_id = c_test_run["test_id"]) # required by schema - if test_created: - s_test.save() - return s_test - - def _import_test_results_sqlite(self, c_test_results, s_test_run): - cursor = connection.cursor() - - # XXX I don't understand how the _order column that Django adds is - # supposed to work. I just set it to 0 here. - - data = [] - - for index, c_test_result in enumerate(c_test_results, 1): - - timestamp = c_test_result.get("timestamp") - if timestamp: - timestamp = datetime_extension.from_json(timestamp) - duration = c_test_result.get("duration", None) - if duration: - duration = timedelta_extension.from_json(duration) - duration = (duration.microseconds + - (duration.seconds * 10 ** 6) + - (duration.days * 24 * 60 * 60 * 10 ** 6)) - result = self._translate_result_string(c_test_result["result"]) - - data.append(( - s_test_run.id, - index, - timestamp, - duration, - c_test_result.get("log_filename", None), - result, - c_test_result.get("measurement", None), - c_test_result.get("message", None), - c_test_result.get("log_lineno", None), - s_test_run.test.id, - c_test_result.get("test_case_id", None), - )) - - cursor.executemany( - """ - INSERT INTO dashboard_app_testresult ( - test_run_id, - relative_index, - timestamp, - microseconds, - filename, - result, - measurement, - message, - lineno, - _order, - test_case_id - ) select - %s, - %s, - %s, - %s, - %s, - %s, - %s, - %s, - %s, - 0, - dashboard_app_testcase.id - FROM dashboard_app_testcase - WHERE dashboard_app_testcase.test_id = %s - AND dashboard_app_testcase.test_case_id - = %s - """, data) - - cursor.close() - - def _import_test_results_pgsql(self, c_test_results, s_test_run): - cursor = connection.cursor() - - # XXX I don't understand how the _order column that Django adds is - # supposed to work. I just let it default to 0 here. - - data = [] - - for i in range(0, len(c_test_results), 1000): - - cursor.execute( - """ - CREATE TEMPORARY TABLE newtestresults ( - relative_index INTEGER, - timestamp TIMESTAMP WITH TIME ZONE, - microseconds BIGINT, - filename TEXT, - result SMALLINT, - measurement NUMERIC(20,10), - message TEXT, - test_case_id TEXT, - lineno INTEGER - ) - """) - - data = [] - - for index, c_test_result in enumerate(c_test_results[i:i+1000], i+1): - - timestamp = c_test_result.get("timestamp") - if timestamp: - timestamp = datetime_extension.from_json(timestamp) - duration = c_test_result.get("duration", None) - if duration: - duration = timedelta_extension.from_json(duration) - duration = (duration.microseconds + - (duration.seconds * 10 ** 6) + - (duration.days * 24 * 60 * 60 * 10 ** 6)) - result = self._translate_result_string(c_test_result["result"]) - - data.extend([ - index, - timestamp, - duration, - c_test_result.get("log_filename", None), - result, - c_test_result.get("measurement", None), - c_test_result.get("message", None), - c_test_result.get("test_case_id", None), - c_test_result.get("log_lineno", None), - ]) - - sequel = ',\n'.join( - ["(" + "%s" % (', '.join(['%s']*9),) + ")"] * (len(data) // 9)) - - cursor.execute( - """ - INSERT INTO newtestresults ( - relative_index, - timestamp, - microseconds, - filename, - result, - measurement, - message, - test_case_id, - lineno - ) VALUES """ + sequel, data) - - cursor.execute( - """ - INSERT INTO dashboard_app_testresult ( - test_run_id, - relative_index, - timestamp, - microseconds, - filename, - result, - measurement, - message, - test_case_id, - lineno - ) SELECT - %s, - relative_index, - timestamp, - microseconds, - filename, - result, - measurement, - message, - dashboard_app_testcase.id, - lineno - FROM newtestresults, dashboard_app_testcase - WHERE dashboard_app_testcase.test_id = %s - AND dashboard_app_testcase.test_case_id - = newtestresults.test_case_id - """ % (s_test_run.id, s_test_run.test.id)) - - cursor.execute( - """ - DROP TABLE newtestresults - """) - - cursor.close() - - def _import_test_results(self, c_test_run, s_test_run): - """ - Import TestRun.test_results - """ - from dashboard_app.models import TestResult - - c_test_results = c_test_run.get("test_results", []) - - if not c_test_results: - return - - if is_postgres(): - self._import_test_cases_pgsql(c_test_results, s_test_run.test) - else: - self._import_test_cases_sqlite(c_test_results, s_test_run.test) - - if is_postgres(): - self._import_test_results_pgsql(c_test_results, s_test_run) - else: - self._import_test_results_sqlite(c_test_results, s_test_run) - - for index, c_test_result in enumerate(c_test_run.get("test_results", []), 1): - if c_test_result.get("attributes", {}): - s_test_result = TestResult.objects.get( - relative_index=index, test_run=s_test_run) - self._import_attributes(c_test_result, s_test_result) - self._log('test result attributes') - - def _import_test_cases_sqlite(self, c_test_results, s_test): - """ - Import TestCase - """ - id_units = [] - for c_test_result in c_test_results: - if "test_case_id" not in c_test_result: - continue - id_units.append( - (c_test_result["test_case_id"], - c_test_result.get("units", ""))) - - cursor = connection.cursor() - - data = [] - for (test_case_id, units) in id_units: - data.append((s_test.id, units, test_case_id)) - cursor.executemany( - """ - INSERT OR IGNORE INTO - dashboard_app_testcase (test_id, units, name, test_case_id) - VALUES (%s, %s, '', %s) - """, data) - cursor.close() - - def _import_test_cases_pgsql(self, c_test_results, s_test): - """ - Import TestCase - """ - id_units = {} - for c_test_result in c_test_results: - if "test_case_id" not in c_test_result: - continue - id_units.setdefault( - c_test_result["test_case_id"], c_test_result.get("units", "")) - id_units = id_units.items() - - cursor = connection.cursor() - for i in range(0, len(id_units), 1000): - - cursor.execute( - """ - CREATE TEMPORARY TABLE - newtestcases (test_case_id text, units text) - """) - data = [] - for (id, units) in id_units[i:i+1000]: - data.append(id) - data.append(units) - sequel = ',\n'.join(["(%s, %s)"] * (len(data) // 2)) - cursor.execute( - """ - INSERT INTO newtestcases (test_case_id, units) VALUES - """ + sequel, data) - - cursor.execute( - """ - INSERT INTO - dashboard_app_testcase (test_id, units, name, test_case_id) - SELECT %s, units, E'', test_case_id FROM newtestcases - WHERE NOT EXISTS (SELECT 1 FROM dashboard_app_testcase - WHERE test_id = %s - AND newtestcases.test_case_id - = dashboard_app_testcase.test_case_id) - """ % (s_test.id, s_test.id)) - cursor.execute( - """ - drop table newtestcases - """) - cursor.close() - - def _import_packages_scratch_sqlite(self, cursor, packages): - data = [] - for c_package in packages: - data.append((c_package['name'], c_package['version'])) - cursor.executemany( - """ - INSERT INTO dashboard_app_softwarepackagescratch - (name, version) VALUES (%s, %s) - """, data) - - def _import_packages_scratch_pgsql(self, cursor, packages): - for i in range(0, len(packages), 1000): - data = [] - for c_package in packages[i:i+1000]: - data.append(c_package['name']) - data.append(c_package['version']) - sequel = ', '.join(["(%s, %s)"] * (len(data) // 2)) - cursor.execute( - "INSERT INTO dashboard_app_softwarepackagescratch (name, version) VALUES " + sequel, data) - - def _import_packages(self, c_test_run, s_test_run): - """ - Import TestRun.pacakges - """ - packages = self._get_sw_context(c_test_run).get("packages", []) - if not packages: - return - cursor = connection.cursor() - - if is_postgres(): - self._import_packages_scratch_pgsql(cursor, packages) - else: - self._import_packages_scratch_sqlite(cursor, packages) - - cursor.execute( - """ - INSERT INTO dashboard_app_softwarepackage (name, version) - SELECT name, version FROM dashboard_app_softwarepackagescratch - EXCEPT SELECT name, version FROM dashboard_app_softwarepackage - """) - cursor.execute( - """ - INSERT INTO - dashboard_app_testrun_packages (testrun_id, softwarepackage_id) - SELECT %s, id FROM dashboard_app_softwarepackage - WHERE EXISTS ( - SELECT * FROM dashboard_app_softwarepackagescratch - WHERE dashboard_app_softwarepackage.name - = dashboard_app_softwarepackagescratch.name - AND dashboard_app_softwarepackage.version - = dashboard_app_softwarepackagescratch.version) - """ % s_test_run.id) - cursor.execute( - """ - delete from dashboard_app_softwarepackagescratch - """) - cursor.close() - - def _import_devices(self, c_test_run, s_test_run): - """ - Import TestRun.devices - """ - from dashboard_app.models import HardwareDevice - - for c_device in self._get_hw_context(c_test_run).get("devices", []): - s_device = HardwareDevice.objects.create( - device_type = c_device["device_type"], - description = c_device["description"] - ) - s_device.save() - self._import_attributes(c_device, s_device) - s_test_run.devices.add(s_device) - - def _import_attributes(self, c_object, s_object): - """ - Import attributes from any client-side object into any - server-side object - """ - for name, value in c_object.get("attributes", {}).iteritems(): - s_object.attributes.create( - name=str(name), value=str(value)) - - def _import_attachments(self, c_test_run, s_test_run): - """ - Import TestRun.attachments - """ - for filename, lines in c_test_run.get("attachments", {}).iteritems(): - s_attachment = s_test_run.attachments.create( - mime_type="text/plain", - content_filename=filename) - s_attachment.save() - s_attachment.content.save( - "attachment-{0}.txt".format(s_attachment.pk), - ContentFile("".join(lines).encode("UTF-8"))) - # Collect this attachment for cleanup in case something goes wrong - # and we need to rollback the transaction - self._content_files.append(s_attachment) - - def _translate_result_string(self, result): - """ - Translate result string used by client-side API to our internal - database integer representing the same value. - """ - from dashboard_app.models import TestResult - return { - "pass": TestResult.RESULT_PASS, - "fail": TestResult.RESULT_FAIL, - "skip": TestResult.RESULT_SKIP, - "unknown": TestResult.RESULT_UNKNOWN - }[result] - - def _get_sw_context(self, c_test_run): - return c_test_run.get("sw_context", {}) - - def _get_hw_context(self, c_test_run): - return c_test_run.get("hw_context", {}) - - -class BundleFormatImporter_1_0_1(BundleFormatImporter_1_0): - """ - IFormatImporter subclass capable of loading "Dashboard Bundle Format 1.0.1" - """ - - def _get_sw_context(self, c_test_run): - return c_test_run.get("software_context", {}) - - def _get_hw_context(self, c_test_run): - return c_test_run.get("hardware_context", {}) - - -class BundleFormatImporter_1_1(BundleFormatImporter_1_0_1): - """ - IFormatImporter subclass capable of loading "Dashboard Bundle Format 1.1" - """ - - def _import_software_context(self, c_test_run, s_test_run): - """ - Import software context in 1.1 format. - - Note: We're not upcalling super here as the second line importing - software image name is quite different in the previous format and I did - not want to create another function for that. Copying the frozen - implementation from previous format is IMHO cleaner. - """ - self._import_packages(c_test_run, s_test_run) - s_test_run.sw_image_desc = self._get_sw_context(c_test_run).get( - "image", {}).get("name", "") - self._import_sources(c_test_run, s_test_run) - - def _import_attachments(self, c_test_run, s_test_run): - """ - Import TestRun.attachments - """ - for c_attachment in c_test_run.get("attachments", []): - s_attachment = s_test_run.attachments.create( - content_filename = c_attachment["pathname"], - mime_type = c_attachment["mime_type"]) - # Save to get pk - s_attachment.save() - content = base64.standard_b64decode(c_attachment["content"]) - s_attachment.content.save( - "attachment-{0}.txt".format(s_attachment.pk), - ContentFile(content)) - - def _import_sources(self, c_test_run, s_test_run): - """ - Import TestRun.sources - """ - from dashboard_app.models import SoftwareSource - - for c_source in self._get_sw_context(c_test_run).get("sources", []): - s_source, source_created = SoftwareSource.objects.get_or_create( - project_name = c_source["project_name"], # required by schema - branch_url = c_source["branch_url"], # required by schema - branch_vcs = c_source["branch_vcs"], # required by schema - # required by schema, may be either int or string so upconvert to string - branch_revision = str(c_source["branch_revision"]), - # optional - commit_timestamp = ( - datetime_extension.from_json( - c_source["commit_timestamp"]) - if "commit_timestamp" in c_source - else None) - ) - if source_created: - s_source.save() - s_test_run.sources.add(s_source) - - -class BundleFormatImporter_1_2(BundleFormatImporter_1_1): - """ - IFormatImporter subclass capable of loading "Dashboard Bundle Format 1.2" - """ - - def _import_attachments(self, c_test_run, s_test_run): - """ - Import TestRun.attachments - """ - for c_attachment in c_test_run.get("attachments", []): - s_attachment = s_test_run.attachments.create( - content_filename = c_attachment["pathname"], - public_url = c_attachment.get("public_url", ""), - mime_type = c_attachment["mime_type"]) - s_attachment.save() - if "content" in c_attachment: - # Content is optional now - content = base64.standard_b64decode(c_attachment["content"]) - s_attachment.content.save( - "attachment-{0}.txt".format(s_attachment.pk), - ContentFile(content)) - - -class BundleFormatImporter_1_3(BundleFormatImporter_1_2): - """ - IFormatImporter subclass capable of loading "Dashboard Bundle Format 1.3" - """ - - def _import_test_run(self, c_test_run, s_bundle): - from dashboard_app.models import Tag - - s_test_run = super(BundleFormatImporter_1_3, self)._import_test_run(c_test_run, s_bundle) - self._log('tags') - for c_tag in c_test_run.get("tags", []): - s_tag, created = Tag.objects.get_or_create(name=c_tag) - if created: - s_tag.save() - s_test_run.tags.add(s_tag) - return s_test_run - - -class BundleFormatImporter_1_4(BundleFormatImporter_1_3): - """ - IFormatImporter subclass capable of loading "Dashboard Bundle Format 1.4" - """ - - def _import_test_run(self, c_test_run, s_bundle): - s_test_run = super(BundleFormatImporter_1_4, self)._import_test_run(c_test_run, s_bundle) - test_duration = c_test_run.get('test_duration') - if test_duration is not None: - test_duration = timedelta_extension.from_json(test_duration) - s_test_run.test_duration = test_duration - s_test_run.save() - return s_test_run - - -class BundleFormatImporter_1_5(BundleFormatImporter_1_4): - """ - IFormatImporter subclass capable of loading "Dashboard Bundle Format 1.5" - """ - - def _import_test_result_attachments(self, c_test_result, s_test_result): - for c_attachment in c_test_result.get("attachments", []): - s_attachment = s_test_result.attachments.create( - content_filename = c_attachment["pathname"], - mime_type = c_attachment["mime_type"]) - # Save to get pk - s_attachment.save() - content = base64.standard_b64decode(c_attachment["content"]) - s_attachment.content.save( - "attachment-{0}.txt".format(s_attachment.pk), - ContentFile(content)) - - def _import_test_results(self, c_test_run, s_test_run): - from dashboard_app.models import TestResult - super(BundleFormatImporter_1_5, self)._import_test_results(c_test_run, s_test_run) - for index, c_test_result in enumerate(c_test_run.get("test_results", []), 1): - if c_test_result.get("attachments", {}): - s_test_result = TestResult.objects.get( - relative_index=index, test_run=s_test_run) - self._import_test_result_attachments(c_test_result, s_test_result) - - -class BundleFormatImporter_1_6(BundleFormatImporter_1_5): - """ - IFormatImporter subclass capable of loading "Dashboard Bundle Format 1.6" - """ - - def _import_testdef(self, c_test_id, c_testdef_metadata): - """ - Import dashboard_app.models.TestDefinition into the database - based on a client-side description of a TestRun metadata. - """ - from dashboard_app.models import TestDefinition - - testdef_meta = { - 'name': c_test_id, - 'version': c_testdef_metadata.get("version"), - 'description': c_testdef_metadata.get("description"), - 'format': c_testdef_metadata.get("format"), - 'location': c_testdef_metadata.get("location"), - 'url': c_testdef_metadata.get("url"), - 'environment': c_testdef_metadata.get("environment"), - 'target_os': c_testdef_metadata.get("os"), - 'target_dev_types': c_testdef_metadata.get("devices"), - } - - try: - s_testdef = TestDefinition.objects.get(name=c_test_id) - # Do not try to update name since it is unique, hence - # pop it from the dictionary. - testdef_meta.pop('name', None) - TestDefinition.objects.filter(name=c_test_id).update( - **testdef_meta) - except ObjectDoesNotExist: - s_testdef = TestDefinition.objects.create(**testdef_meta) - s_testdef.save() - - def _import_test_results(self, c_test_run, s_test_run): - from dashboard_app.models import TestResult - super(BundleFormatImporter_1_6, self)._import_test_results(c_test_run, - s_test_run) - if c_test_run.get("testdef_metadata"): - self._import_testdef(c_test_run["test_id"], - c_test_run["testdef_metadata"]) - - -class BundleDeserializer(object): - """ - Helper class for de-serializing JSON bundle content into database models - """ - - IMPORTERS = { - "Dashboard Bundle Format 1.0": BundleFormatImporter_1_0, - "Dashboard Bundle Format 1.0.1": BundleFormatImporter_1_0_1, - "Dashboard Bundle Format 1.1": BundleFormatImporter_1_1, - "Dashboard Bundle Format 1.2": BundleFormatImporter_1_2, - "Dashboard Bundle Format 1.3": BundleFormatImporter_1_3, - "Dashboard Bundle Format 1.4": BundleFormatImporter_1_4, - "Dashboard Bundle Format 1.5": BundleFormatImporter_1_5, - "Dashboard Bundle Format 1.6": BundleFormatImporter_1_6, - } - - def deserialize(self, s_bundle, prefer_evolution): - """ - Deserializes specified Bundle. - - :Discussion: - This method also handles internal transaction handling. - All operations performed during bundle deserialization are - _rolled_back_ if anything fails. - - If prefer_evolution is enabled then the document is first evolved - to the latest known format and only then imported into the - database. This operation is currently disabled to ensure that all - old documents are imported exactly as before. Enabling it should - be quite safe though as it passes all tests. - - :Exceptions raised: - json_schema_validator.ValidationError - When the document does not match the appropriate schema. - linaro_dashboard_bundle.errors.DocumentFormatError - When the document format is not in the known set of formats. - ValueError - When the text does not represent a correct JSON document. - """ - assert s_bundle.is_deserialized is False - s_bundle.content.open('rb') - try: - logging.debug("Loading document") - fmt, doc = DocumentIO.load(s_bundle.content) - logging.debug("Document loaded") - if prefer_evolution: - logging.debug("Evolving document") - DocumentEvolution.evolve_document(doc) - logging.debug("Document evolution complete") - fmt = doc["format"] - finally: - s_bundle.content.close() - importer = self.IMPORTERS.get(fmt) - if importer is None: - raise DocumentFormatError(fmt) - try: - logging.debug("Importing document") - importer().import_document(s_bundle, doc) - logging.debug("Document import complete") - except Exception as exc: - logging.debug("Exception while importing document: %r", exc) - raise === removed file 'dashboard_app/managers.py' --- dashboard_app/managers.py 2011-09-28 02:28:43 +0000 +++ dashboard_app/managers.py 1970-01-01 00:00:00 +0000 @@ -1,70 +0,0 @@ -# Copyright (C) 2010, 2011 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . -# -from django.core.files.base import ContentFile -from django.db import models, transaction, IntegrityError - -import logging - - -class BundleManager(models.Manager): - - @transaction.commit_on_success - def create_with_content(self, bundle_stream, uploaded_by, content_filename, content): - logging.debug("Creating bundle object") - bundle = self.create( - bundle_stream=bundle_stream, - uploaded_by=uploaded_by, - content_filename=content_filename) - # XXX: this _can_ fail -- if content_sha1 is a duplicate - logging.debug("Saving bundle object (this is safe so far)") - bundle.save() - try: - logging.debug("saving bundle content (file) and bundle object") - bundle.content.save("bundle-{0}".format(bundle.pk), - ContentFile(content)) - except IntegrityError as exc: - logging.debug("integrity error: %r", exc) - # Note: we're not saving the deletion back to the database - # because we are going to rollback anyway. In PostgreSQL this - # would also always fail because the database is not going to - # honor any other operations until we rollback. - # See: - # http://docs.djangoproject.com/en/1.2/topics/db/transactions/#handling-exceptions-within-postgresql-transactions - logging.debug("deleting content file") - bundle.content.delete(save=False) - raise - else: - return bundle - - -class TestRunDenormalizationManager(models.Manager): - - def create_from_test_run(self, test_run): - from dashboard_app.models import TestResult - stats = test_run.test_results.values('result').annotate( - count=models.Count('result')).order_by() - result = dict([ - (TestResult.RESULT_MAP[item['result']], item['count']) - for item in stats]) - return self.create( - test_run=test_run, - count_pass=result.get('pass', 0), - count_fail=result.get('fail', 0), - count_skip=result.get('skip', 0), - count_unknown=result.get('unknown', 0)) === removed directory 'dashboard_app/migrations' === removed file 'dashboard_app/migrations/0001_initial.py' --- dashboard_app/migrations/0001_initial.py 2011-04-18 10:24:59 +0000 +++ dashboard_app/migrations/0001_initial.py 1970-01-01 00:00:00 +0000 @@ -1,382 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Adding model 'SoftwarePackage' - db.create_table('dashboard_app_softwarepackage', ( - ('version', self.gf('django.db.models.fields.CharField')(max_length=64)), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), - )) - db.send_create_signal('dashboard_app', ['SoftwarePackage']) - - # Adding unique constraint on 'SoftwarePackage', fields ['name', 'version'] - db.create_unique('dashboard_app_softwarepackage', ['name', 'version']) - - # Adding model 'NamedAttribute' - db.create_table('dashboard_app_namedattribute', ( - ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('value', self.gf('django.db.models.fields.CharField')(max_length=512)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=32)), - )) - db.send_create_signal('dashboard_app', ['NamedAttribute']) - - # Adding unique constraint on 'NamedAttribute', fields ['object_id', 'name'] - db.create_unique('dashboard_app_namedattribute', ['object_id', 'name']) - - # Adding model 'HardwareDevice' - db.create_table('dashboard_app_hardwaredevice', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('device_type', self.gf('django.db.models.fields.CharField')(max_length=32)), - ('description', self.gf('django.db.models.fields.CharField')(max_length=256)), - )) - db.send_create_signal('dashboard_app', ['HardwareDevice']) - - # Adding model 'BundleStream' - db.create_table('dashboard_app_bundlestream', ( - ('group', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.Group'], null=True, blank=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)), - ('is_anonymous', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('pathname', self.gf('django.db.models.fields.CharField')(unique=True, max_length=128)), - ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True)), - ('is_public', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), - ('slug', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)), - )) - db.send_create_signal('dashboard_app', ['BundleStream']) - - # Adding model 'Bundle' - db.create_table('dashboard_app_bundle', ( - ('content_sha1', self.gf('django.db.models.fields.CharField')(max_length=40, unique=True, null=True)), - ('bundle_stream', self.gf('django.db.models.fields.related.ForeignKey')(related_name='bundles', to=orm['dashboard_app.BundleStream'])), - ('uploaded_on', self.gf('django.db.models.fields.DateTimeField')(default=datetime.datetime.utcnow)), - ('content', self.gf('django.db.models.fields.files.FileField')(max_length=100, null=True)), - ('uploaded_by', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='uploaded_bundles', null=True, to=orm['auth.User'])), - ('content_filename', self.gf('django.db.models.fields.CharField')(max_length=256)), - ('is_deserialized', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - )) - db.send_create_signal('dashboard_app', ['Bundle']) - - # Adding model 'BundleDeserializationError' - db.create_table('dashboard_app_bundledeserializationerror', ( - ('error_message', self.gf('django.db.models.fields.CharField')(max_length=1024)), - ('bundle', self.gf('django.db.models.fields.related.ForeignKey')(related_name='deserialization_error', unique=True, primary_key=True, to=orm['dashboard_app.Bundle'])), - ('traceback', self.gf('django.db.models.fields.TextField')(max_length=32768)), - )) - db.send_create_signal('dashboard_app', ['BundleDeserializationError']) - - # Adding model 'Test' - db.create_table('dashboard_app_test', ( - ('test_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=64)), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=64, blank=True)), - )) - db.send_create_signal('dashboard_app', ['Test']) - - # Adding model 'TestCase' - db.create_table('dashboard_app_testcase', ( - ('test', self.gf('django.db.models.fields.related.ForeignKey')(related_name='test_cases', to=orm['dashboard_app.Test'])), - ('units', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)), - ('test_case_id', self.gf('django.db.models.fields.CharField')(max_length=100)), - )) - db.send_create_signal('dashboard_app', ['TestCase']) - - # Adding unique constraint on 'TestCase', fields ['test', 'test_case_id'] - db.create_unique('dashboard_app_testcase', ['test_id', 'test_case_id']) - - # Adding model 'SoftwareSource' - db.create_table('dashboard_app_softwaresource', ( - ('project_name', self.gf('django.db.models.fields.CharField')(max_length=32)), - ('branch_url', self.gf('django.db.models.fields.CharField')(max_length=256)), - ('branch_vcs', self.gf('django.db.models.fields.CharField')(max_length=10)), - ('commit_timestamp', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('branch_revision', self.gf('django.db.models.fields.CharField')(max_length=128)), - )) - db.send_create_signal('dashboard_app', ['SoftwareSource']) - - # Adding model 'TestRun' - db.create_table('dashboard_app_testrun', ( - ('sw_image_desc', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)), - ('analyzer_assigned_date', self.gf('django.db.models.fields.DateTimeField')()), - ('bundle', self.gf('django.db.models.fields.related.ForeignKey')(related_name='test_runs', to=orm['dashboard_app.Bundle'])), - ('time_check_performed', self.gf('django.db.models.fields.BooleanField')(default=False, blank=True)), - ('analyzer_assigned_uuid', self.gf('django.db.models.fields.CharField')(unique=True, max_length=36)), - ('test', self.gf('django.db.models.fields.related.ForeignKey')(related_name='test_runs', to=orm['dashboard_app.Test'])), - ('import_assigned_date', self.gf('django.db.models.fields.DateTimeField')(auto_now_add=True, blank=True)), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - )) - db.send_create_signal('dashboard_app', ['TestRun']) - - # Adding M2M table for field sources on 'TestRun' - db.create_table('dashboard_app_testrun_sources', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('testrun', models.ForeignKey(orm['dashboard_app.testrun'], null=False)), - ('softwaresource', models.ForeignKey(orm['dashboard_app.softwaresource'], null=False)) - )) - db.create_unique('dashboard_app_testrun_sources', ['testrun_id', 'softwaresource_id']) - - # Adding M2M table for field packages on 'TestRun' - db.create_table('dashboard_app_testrun_packages', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('testrun', models.ForeignKey(orm['dashboard_app.testrun'], null=False)), - ('softwarepackage', models.ForeignKey(orm['dashboard_app.softwarepackage'], null=False)) - )) - db.create_unique('dashboard_app_testrun_packages', ['testrun_id', 'softwarepackage_id']) - - # Adding M2M table for field devices on 'TestRun' - db.create_table('dashboard_app_testrun_devices', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('testrun', models.ForeignKey(orm['dashboard_app.testrun'], null=False)), - ('hardwaredevice', models.ForeignKey(orm['dashboard_app.hardwaredevice'], null=False)) - )) - db.create_unique('dashboard_app_testrun_devices', ['testrun_id', 'hardwaredevice_id']) - - # Adding model 'Attachment' - db.create_table('dashboard_app_attachment', ( - ('content_filename', self.gf('django.db.models.fields.CharField')(max_length=256)), - ('public_url', self.gf('django.db.models.fields.URLField')(max_length=512, blank=True)), - ('object_id', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('content', self.gf('django.db.models.fields.files.FileField')(max_length=100, null=True)), - ('content_type', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['contenttypes.ContentType'])), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('mime_type', self.gf('django.db.models.fields.CharField')(max_length=64)), - )) - db.send_create_signal('dashboard_app', ['Attachment']) - - # Adding model 'TestResult' - db.create_table('dashboard_app_testresult', ( - ('test_run', self.gf('django.db.models.fields.related.ForeignKey')(related_name='test_results', to=orm['dashboard_app.TestRun'])), - ('_order', self.gf('django.db.models.fields.IntegerField')(default=0)), - ('relative_index', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('timestamp', self.gf('django.db.models.fields.DateTimeField')(null=True, blank=True)), - ('microseconds', self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True)), - ('filename', self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True)), - ('result', self.gf('django.db.models.fields.PositiveSmallIntegerField')()), - ('measurement', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=20, decimal_places=10, blank=True)), - ('message', self.gf('django.db.models.fields.TextField')(max_length=1024, null=True, blank=True)), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('test_case', self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='test_results', null=True, to=orm['dashboard_app.TestCase'])), - ('lineno', self.gf('django.db.models.fields.PositiveIntegerField')(null=True, blank=True)), - )) - db.send_create_signal('dashboard_app', ['TestResult']) - - - def backwards(self, orm): - - # Deleting model 'SoftwarePackage' - db.delete_table('dashboard_app_softwarepackage') - - # Removing unique constraint on 'SoftwarePackage', fields ['name', 'version'] - db.delete_unique('dashboard_app_softwarepackage', ['name', 'version']) - - # Deleting model 'NamedAttribute' - db.delete_table('dashboard_app_namedattribute') - - # Removing unique constraint on 'NamedAttribute', fields ['object_id', 'name'] - db.delete_unique('dashboard_app_namedattribute', ['object_id', 'name']) - - # Deleting model 'HardwareDevice' - db.delete_table('dashboard_app_hardwaredevice') - - # Deleting model 'BundleStream' - db.delete_table('dashboard_app_bundlestream') - - # Deleting model 'Bundle' - db.delete_table('dashboard_app_bundle') - - # Deleting model 'BundleDeserializationError' - db.delete_table('dashboard_app_bundledeserializationerror') - - # Deleting model 'Test' - db.delete_table('dashboard_app_test') - - # Deleting model 'TestCase' - db.delete_table('dashboard_app_testcase') - - # Removing unique constraint on 'TestCase', fields ['test', 'test_case_id'] - db.delete_unique('dashboard_app_testcase', ['test_id', 'test_case_id']) - - # Deleting model 'SoftwareSource' - db.delete_table('dashboard_app_softwaresource') - - # Deleting model 'TestRun' - db.delete_table('dashboard_app_testrun') - - # Removing M2M table for field sources on 'TestRun' - db.delete_table('dashboard_app_testrun_sources') - - # Removing M2M table for field packages on 'TestRun' - db.delete_table('dashboard_app_testrun_packages') - - # Removing M2M table for field devices on 'TestRun' - db.delete_table('dashboard_app_testrun_devices') - - # Deleting model 'Attachment' - db.delete_table('dashboard_app_attachment') - - # Deleting model 'TestResult' - db.delete_table('dashboard_app_testresult') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True', 'blank': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0002_add_index_NamedAttribute_object_id_and_content_type_id_and_name.py' --- dashboard_app/migrations/0002_add_index_NamedAttribute_object_id_and_content_type_id_and_name.py 2011-05-02 17:47:00 +0000 +++ dashboard_app/migrations/0002_add_index_NamedAttribute_object_id_and_content_type_id_and_name.py 1970-01-01 00:00:00 +0000 @@ -1,170 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Adding index on 'NamedAttribute', fields ['object_id', 'content_type_id', 'name'] - db.create_index('dashboard_app_namedattribute', ['object_id', 'content_type_id', 'name']) - - - def backwards(self, orm): - - # Removing index on 'NamedAttribute', fields ['object_id', 'content_type_id', 'name'] - db.delete_index('dashboard_app_namedattribute', ['object_id', 'content_type-id', 'name']) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0003_add_index_HardwareDevice_device_type.py' --- dashboard_app/migrations/0003_add_index_HardwareDevice_device_type.py 2011-05-02 17:47:00 +0000 +++ dashboard_app/migrations/0003_add_index_HardwareDevice_device_type.py 1970-01-01 00:00:00 +0000 @@ -1,170 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Adding index on 'HardwareDevice', fields ['device_type', 'id'] - db.create_index('dashboard_app_hardwaredevice', ['device_type', 'id']) - - - def backwards(self, orm): - - # Removing index on 'HardwareDevice', fields ['device_type', 'id'] - db.delete_index('dashboard_app_hardwaredevice', ['device_type', 'id']) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0004_auto__add_softwarepackagescratch.py' --- dashboard_app/migrations/0004_auto__add_softwarepackagescratch.py 2011-07-04 02:09:01 +0000 +++ dashboard_app/migrations/0004_auto__add_softwarepackagescratch.py 1970-01-01 00:00:00 +0000 @@ -1,181 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Adding model 'SoftwarePackageScratch' - db.create_table('dashboard_app_softwarepackagescratch', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=64)), - ('version', self.gf('django.db.models.fields.CharField')(max_length=64)), - )) - db.send_create_signal('dashboard_app', ['SoftwarePackageScratch']) - - - def backwards(self, orm): - - # Deleting model 'SoftwarePackageScratch' - db.delete_table('dashboard_app_softwarepackagescratch') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '64'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0005_auto__chg_field_softwarepackage_version__chg_field_softwarepackage_nam.py' --- dashboard_app/migrations/0005_auto__chg_field_softwarepackage_version__chg_field_softwarepackage_nam.py 2011-09-14 12:40:54 +0000 +++ dashboard_app/migrations/0005_auto__chg_field_softwarepackage_version__chg_field_softwarepackage_nam.py 1970-01-01 00:00:00 +0000 @@ -1,194 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Changing field 'SoftwarePackage.version' - db.alter_column('dashboard_app_softwarepackage', 'version', self.gf('django.db.models.fields.CharField')(max_length=128)) - - # Changing field 'SoftwarePackage.name' - db.alter_column('dashboard_app_softwarepackage', 'name', self.gf('django.db.models.fields.CharField')(max_length=128)) - - # Changing field 'SoftwarePackageScratch.version' - db.alter_column('dashboard_app_softwarepackagescratch', 'version', self.gf('django.db.models.fields.CharField')(max_length=128)) - - # Changing field 'SoftwarePackageScratch.name' - db.alter_column('dashboard_app_softwarepackagescratch', 'name', self.gf('django.db.models.fields.CharField')(max_length=128)) - - - def backwards(self, orm): - - # Changing field 'SoftwarePackage.version' - db.alter_column('dashboard_app_softwarepackage', 'version', self.gf('django.db.models.fields.CharField')(max_length=64)) - - # Changing field 'SoftwarePackage.name' - db.alter_column('dashboard_app_softwarepackage', 'name', self.gf('django.db.models.fields.CharField')(max_length=64)) - - # Changing field 'SoftwarePackageScratch.version' - db.alter_column('dashboard_app_softwarepackagescratch', 'version', self.gf('django.db.models.fields.CharField')(max_length=64)) - - # Changing field 'SoftwarePackageScratch.name' - db.alter_column('dashboard_app_softwarepackagescratch', 'name', self.gf('django.db.models.fields.CharField')(max_length=64)) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0006_auto__chg_field_bundledeserializationerror_bundle.py' --- dashboard_app/migrations/0006_auto__chg_field_bundledeserializationerror_bundle.py 2011-09-26 12:55:16 +0000 +++ dashboard_app/migrations/0006_auto__chg_field_bundledeserializationerror_bundle.py 1970-01-01 00:00:00 +0000 @@ -1,176 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Changing field 'BundleDeserializationError.bundle' - db.alter_column('dashboard_app_bundledeserializationerror', 'bundle_id', self.gf('django.db.models.fields.related.OneToOneField')(unique=True, primary_key=True, to=orm['dashboard_app.Bundle'])) - - - def backwards(self, orm): - - # Changing field 'BundleDeserializationError.bundle' - db.alter_column('dashboard_app_bundledeserializationerror', 'bundle_id', self.gf('django.db.models.fields.related.ForeignKey')(unique=True, primary_key=True, to=orm['dashboard_app.Bundle'])) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0007_auto__add_tag.py' --- dashboard_app/migrations/0007_auto__add_tag.py 2011-09-26 21:15:33 +0000 +++ dashboard_app/migrations/0007_auto__add_tag.py 1970-01-01 00:00:00 +0000 @@ -1,197 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Adding model 'Tag' - db.create_table('dashboard_app_tag', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=256, db_index=True)), - )) - db.send_create_signal('dashboard_app', ['Tag']) - - # Adding M2M table for field tags on 'TestRun' - db.create_table('dashboard_app_testrun_tags', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('testrun', models.ForeignKey(orm['dashboard_app.testrun'], null=False)), - ('tag', models.ForeignKey(orm['dashboard_app.tag'], null=False)) - )) - db.create_unique('dashboard_app_testrun_tags', ['testrun_id', 'tag_id']) - - - def backwards(self, orm): - - # Deleting model 'Tag' - db.delete_table('dashboard_app_tag') - - # Removing M2M table for field tags on 'TestRun' - db.delete_table('dashboard_app_testrun_tags') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256', 'db_index': 'True'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0008_auto__add_testingeffort.py' --- dashboard_app/migrations/0008_auto__add_testingeffort.py 2013-01-15 21:04:42 +0000 +++ dashboard_app/migrations/0008_auto__add_testingeffort.py 1970-01-01 00:00:00 +0000 @@ -1,224 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - depends_on = ( - ("lava_projects", "0001_add_model_Project"), - ) - - def forwards(self, orm): - - # Adding model 'TestingEffort' - db.create_table('dashboard_app_testingeffort', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='testing_efforts', to=orm['lava_projects.Project'])), - ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), - ('description', self.gf('django.db.models.fields.TextField')()), - )) - db.send_create_signal('dashboard_app', ['TestingEffort']) - - # Adding M2M table for field tags on 'TestingEffort' - db.create_table('dashboard_app_testingeffort_tags', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('testingeffort', models.ForeignKey(orm['dashboard_app.testingeffort'], null=False)), - ('tag', models.ForeignKey(orm['dashboard_app.tag'], null=False)) - )) - db.create_unique('dashboard_app_testingeffort_tags', ['testingeffort_id', 'tag_id']) - - - def backwards(self, orm): - - # Deleting model 'TestingEffort' - db.delete_table('dashboard_app_testingeffort') - - # Removing M2M table for field tags on 'TestingEffort' - db.delete_table('dashboard_app_testingeffort_tags') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256', 'db_index': 'True'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0009_auto__add_testrundenormalization.py' --- dashboard_app/migrations/0009_auto__add_testrundenormalization.py 2011-09-28 02:28:43 +0000 +++ dashboard_app/migrations/0009_auto__add_testrundenormalization.py 1970-01-01 00:00:00 +0000 @@ -1,218 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Adding model 'TestRunDenormalization' - db.create_table('dashboard_app_testrundenormalization', ( - ('test_run', self.gf('django.db.models.fields.related.OneToOneField')(related_name='denormalization', unique=True, primary_key=True, to=orm['dashboard_app.TestRun'])), - ('count_pass', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('count_fail', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('count_skip', self.gf('django.db.models.fields.PositiveIntegerField')()), - ('count_unknown', self.gf('django.db.models.fields.PositiveIntegerField')()), - )) - db.send_create_signal('dashboard_app', ['TestRunDenormalization']) - - - def backwards(self, orm): - - # Deleting model 'TestRunDenormalization' - db.delete_table('dashboard_app_testrundenormalization') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256', 'db_index': 'True'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0010_denormalize_test_run.py' --- dashboard_app/migrations/0010_denormalize_test_run.py 2011-09-28 02:29:33 +0000 +++ dashboard_app/migrations/0010_denormalize_test_run.py 1970-01-01 00:00:00 +0000 @@ -1,235 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import DataMigration -from django.db import models - -class Migration(DataMigration): - - def forwards(self, orm): - # Result codes - RESULT_PASS = 0 - RESULT_FAIL = 1 - RESULT_SKIP = 2 - RESULT_UNKNOWN = 3 - # Code-to-name mapping - RESULT_MAP = { - RESULT_PASS: 'pass', - RESULT_FAIL: 'fail', - RESULT_SKIP: 'skip', - RESULT_UNKNOWN: 'unknown' - } - for test_run in orm.TestRun.objects.all(): - stats = test_run.test_results.order_by( - # Disable sorting - ).values( - 'result' # only get the result outcome (pass/fail/etc) - ).annotate( - count=models.Count('result') # Count number of items with this value - ) - # Translate the 0-4 element array into a 0-4 element dictionary - result = dict([ - (RESULT_MAP[item['result']], item['count']) - for item in stats]) - # Create a denormalized test run instance - orm.TestRunDenormalization.objects.create( - test_run=test_run, - count_pass=result.get('pass', 0), - count_fail=result.get('fail', 0), - count_skip=result.get('skip', 0), - count_unknown=result.get('unknown', 0)) - - def backwards(self, orm): - orm.TestRunDenormalization.objects.all().delete() - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '512'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256', 'db_index': 'True'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0011_auto__chg_field_namedattribute_value__chg_field_namedattribute_name.py' --- dashboard_app/migrations/0011_auto__chg_field_namedattribute_value__chg_field_namedattribute_name.py 2011-11-25 01:48:45 +0000 +++ dashboard_app/migrations/0011_auto__chg_field_namedattribute_value__chg_field_namedattribute_name.py 1970-01-01 00:00:00 +0000 @@ -1,217 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Changing field 'NamedAttribute.value' - db.alter_column('dashboard_app_namedattribute', 'value', self.gf('django.db.models.fields.TextField')()) - - # Changing field 'NamedAttribute.name' - db.alter_column('dashboard_app_namedattribute', 'name', self.gf('django.db.models.fields.TextField')()) - - - def backwards(self, orm): - - # Changing field 'NamedAttribute.value' - db.alter_column('dashboard_app_namedattribute', 'value', self.gf('django.db.models.fields.CharField')(max_length=512)) - - # Changing field 'NamedAttribute.name' - db.alter_column('dashboard_app_namedattribute', 'name', self.gf('django.db.models.fields.CharField')(max_length=32)) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256', 'db_index': 'True'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0012_auto__del_field_bundle_content__add_field_bundle__raw_content__add_fie.py' --- dashboard_app/migrations/0012_auto__del_field_bundle_content__add_field_bundle__raw_content__add_fie.py 2012-01-19 14:39:18 +0000 +++ dashboard_app/migrations/0012_auto__del_field_bundle_content__add_field_bundle__raw_content__add_fie.py 1970-01-01 00:00:00 +0000 @@ -1,212 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Adding field 'Bundle._gz_content' - db.add_column('dashboard_app_bundle', '_gz_content', self.gf('django.db.models.fields.files.FileField')(max_length=100, null=True, db_column='gz_content'), keep_default=False) - - - def backwards(self, orm): - - # Deleting field 'Bundle._gz_content' - db.delete_column('dashboard_app_bundle', 'gz_content') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256', 'db_index': 'True'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'units': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0013_auto__chg_field_testcase_units__chg_field_testcase_test_case_id__chg_f.py' --- dashboard_app/migrations/0013_auto__chg_field_testcase_units__chg_field_testcase_test_case_id__chg_f.py 2012-01-30 09:53:38 +0000 +++ dashboard_app/migrations/0013_auto__chg_field_testcase_units__chg_field_testcase_test_case_id__chg_f.py 1970-01-01 00:00:00 +0000 @@ -1,224 +0,0 @@ -# encoding: utf-8 -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Changing field 'TestCase.units' - db.alter_column('dashboard_app_testcase', 'units', self.gf('django.db.models.fields.TextField')()) - - # Changing field 'TestCase.test_case_id' - db.alter_column('dashboard_app_testcase', 'test_case_id', self.gf('django.db.models.fields.TextField')()) - - # Changing field 'TestCase.name' - db.alter_column('dashboard_app_testcase', 'name', self.gf('django.db.models.fields.TextField')()) - - - def backwards(self, orm): - - # Changing field 'TestCase.units' - db.alter_column('dashboard_app_testcase', 'units', self.gf('django.db.models.fields.CharField')(max_length=100)) - - # Changing field 'TestCase.test_case_id' - db.alter_column('dashboard_app_testcase', 'test_case_id', self.gf('django.db.models.fields.CharField')(max_length=100)) - - # Changing field 'TestCase.name' - db.alter_column('dashboard_app_testcase', 'name', self.gf('django.db.models.fields.CharField')(max_length=100)) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256', 'db_index': 'True'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100', 'db_index': 'True'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0014_auto__add_imageset__add_image__add_imageattribute.py' --- dashboard_app/migrations/0014_auto__add_imageset__add_image__add_imageattribute.py 2012-07-12 04:58:23 +0000 +++ dashboard_app/migrations/0014_auto__add_imageset__add_image__add_imageattribute.py 1970-01-01 00:00:00 +0000 @@ -1,280 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'ImageSet' - db.create_table('dashboard_app_imageset', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=1024)), - )) - db.send_create_signal('dashboard_app', ['ImageSet']) - - # Adding M2M table for field images on 'ImageSet' - db.create_table('dashboard_app_imageset_images', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('imageset', models.ForeignKey(orm['dashboard_app.imageset'], null=False)), - ('image', models.ForeignKey(orm['dashboard_app.image'], null=False)) - )) - db.create_unique('dashboard_app_imageset_images', ['imageset_id', 'image_id']) - - # Adding model 'Image' - db.create_table('dashboard_app_image', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=1024)), - ('build_number_attribute', self.gf('django.db.models.fields.CharField')(max_length=1024)), - )) - db.send_create_signal('dashboard_app', ['Image']) - - # Adding M2M table for field bundle_streams on 'Image' - db.create_table('dashboard_app_image_bundle_streams', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('image', models.ForeignKey(orm['dashboard_app.image'], null=False)), - ('bundlestream', models.ForeignKey(orm['dashboard_app.bundlestream'], null=False)) - )) - db.create_unique('dashboard_app_image_bundle_streams', ['image_id', 'bundlestream_id']) - - # Adding model 'ImageAttribute' - db.create_table('dashboard_app_imageattribute', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=1024)), - ('value', self.gf('django.db.models.fields.CharField')(max_length=1024)), - ('image', self.gf('django.db.models.fields.related.ForeignKey')(related_name='required_attributes', to=orm['dashboard_app.Image'])), - )) - db.send_create_signal('dashboard_app', ['ImageAttribute']) - - - def backwards(self, orm): - # Deleting model 'ImageSet' - db.delete_table('dashboard_app_imageset') - - # Removing M2M table for field images on 'ImageSet' - db.delete_table('dashboard_app_imageset_images') - - # Deleting model 'Image' - db.delete_table('dashboard_app_image') - - # Removing M2M table for field bundle_streams on 'Image' - db.delete_table('dashboard_app_image_bundle_streams') - - # Deleting model 'ImageAttribute' - db.delete_table('dashboard_app_imageattribute') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0015_auto__add_launchpadbug.py' --- dashboard_app/migrations/0015_auto__add_launchpadbug.py 2012-07-13 03:46:23 +0000 +++ dashboard_app/migrations/0015_auto__add_launchpadbug.py 1970-01-01 00:00:00 +0000 @@ -1,252 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'LaunchpadBug' - db.create_table('dashboard_app_launchpadbug', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('bug_id', self.gf('django.db.models.fields.PositiveIntegerField')(unique=True)), - )) - db.send_create_signal('dashboard_app', ['LaunchpadBug']) - - # Adding M2M table for field test_runs on 'LaunchpadBug' - db.create_table('dashboard_app_launchpadbug_test_runs', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('launchpadbug', models.ForeignKey(orm['dashboard_app.launchpadbug'], null=False)), - ('testrun', models.ForeignKey(orm['dashboard_app.testrun'], null=False)) - )) - db.create_unique('dashboard_app_launchpadbug_test_runs', ['launchpadbug_id', 'testrun_id']) - - - def backwards(self, orm): - # Deleting model 'LaunchpadBug' - db.delete_table('dashboard_app_launchpadbug') - - # Removing M2M table for field test_runs on 'LaunchpadBug' - db.delete_table('dashboard_app_launchpadbug_test_runs') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.TestRun']", 'symmetrical': 'False'}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0016_auto__add_field_image_uploaded_by__chg_field_image_name.py' --- dashboard_app/migrations/0016_auto__add_field_image_uploaded_by__chg_field_image_name.py 2012-07-18 05:32:28 +0000 +++ dashboard_app/migrations/0016_auto__add_field_image_uploaded_by__chg_field_image_name.py 1970-01-01 00:00:00 +0000 @@ -1,252 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'Image.uploaded_by' - db.add_column('dashboard_app_image', 'uploaded_by', - self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True), - keep_default=False) - - - # Changing field 'Image.name' - db.alter_column('dashboard_app_image', 'name', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=1024)) - # Adding index on 'Image', fields ['name'] - db.create_index('dashboard_app_image', ['name']) - - - def backwards(self, orm): - # Removing index on 'Image', fields ['name'] - db.delete_index('dashboard_app_image', ['name']) - - # Deleting field 'Image.uploaded_by' - db.delete_column('dashboard_app_image', 'uploaded_by_id') - - - # Changing field 'Image.name' - db.alter_column('dashboard_app_image', 'name', self.gf('django.db.models.fields.CharField')(max_length=1024, unique=True)) - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0017_auto__add_testrunfilterattribute__add_testrunfilter__add_unique_testru.py' --- dashboard_app/migrations/0017_auto__add_testrunfilterattribute__add_testrunfilter__add_unique_testru.py 2012-08-13 01:30:49 +0000 +++ dashboard_app/migrations/0017_auto__add_testrunfilterattribute__add_testrunfilter__add_unique_testru.py 1970-01-01 00:00:00 +0000 @@ -1,290 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'TestRunFilterAttribute' - db.create_table('dashboard_app_testrunfilterattribute', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=1024)), - ('value', self.gf('django.db.models.fields.CharField')(max_length=1024)), - ('filter', self.gf('django.db.models.fields.related.ForeignKey')(related_name='attributes', to=orm['dashboard_app.TestRunFilter'])), - )) - db.send_create_signal('dashboard_app', ['TestRunFilterAttribute']) - - # Adding model 'TestRunFilter' - db.create_table('dashboard_app_testrunfilter', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('owner', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), - ('name', self.gf('django.db.models.fields.SlugField')(max_length=1024)), - ('test', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.Test'], null=True, blank=True)), - ('test_case', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.TestCase'], null=True, blank=True)), - )) - db.send_create_signal('dashboard_app', ['TestRunFilter']) - - # Adding M2M table for field bundle_streams on 'TestRunFilter' - db.create_table('dashboard_app_testrunfilter_bundle_streams', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('testrunfilter', models.ForeignKey(orm['dashboard_app.testrunfilter'], null=False)), - ('bundlestream', models.ForeignKey(orm['dashboard_app.bundlestream'], null=False)) - )) - db.create_unique('dashboard_app_testrunfilter_bundle_streams', ['testrunfilter_id', 'bundlestream_id']) - - # Adding unique constraint on 'TestRunFilter', fields ['owner', 'name'] - db.create_unique('dashboard_app_testrunfilter', ['owner_id', 'name']) - - - def backwards(self, orm): - # Removing unique constraint on 'TestRunFilter', fields ['owner', 'name'] - db.delete_unique('dashboard_app_testrunfilter', ['owner_id', 'name']) - - # Deleting model 'TestRunFilterAttribute' - db.delete_table('dashboard_app_testrunfilterattribute') - - # Deleting model 'TestRunFilter' - db.delete_table('dashboard_app_testrunfilter') - - # Removing M2M table for field bundle_streams on 'TestRunFilter' - db.delete_table('dashboard_app_testrunfilter_bundle_streams') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.Test']", 'null': 'True', 'blank': 'True'}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestCase']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0018_auto__add_field_testrunfilter_public.py' --- dashboard_app/migrations/0018_auto__add_field_testrunfilter_public.py 2012-08-15 23:40:53 +0000 +++ dashboard_app/migrations/0018_auto__add_field_testrunfilter_public.py 1970-01-01 00:00:00 +0000 @@ -1,257 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'TestRunFilter.public' - db.add_column('dashboard_app_testrunfilter', 'public', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'TestRunFilter.public' - db.delete_column('dashboard_app_testrunfilter', 'public') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.Test']", 'null': 'True', 'blank': 'True'}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestCase']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0019_auto__add_testrunfiltersubscription__add_unique_testrunfiltersubscript.py' --- dashboard_app/migrations/0019_auto__add_testrunfiltersubscription__add_unique_testrunfiltersubscript.py 2012-08-16 00:44:01 +0000 +++ dashboard_app/migrations/0019_auto__add_testrunfiltersubscription__add_unique_testrunfiltersubscript.py 1970-01-01 00:00:00 +0000 @@ -1,274 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'TestRunFilterSubscription' - db.create_table('dashboard_app_testrunfiltersubscription', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('user', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'])), - ('filter', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.TestRunFilter'])), - ('level', self.gf('django.db.models.fields.IntegerField')(default=0)), - )) - db.send_create_signal('dashboard_app', ['TestRunFilterSubscription']) - - # Adding unique constraint on 'TestRunFilterSubscription', fields ['user', 'filter'] - db.create_unique('dashboard_app_testrunfiltersubscription', ['user_id', 'filter_id']) - - - def backwards(self, orm): - # Removing unique constraint on 'TestRunFilterSubscription', fields ['user', 'filter'] - db.delete_unique('dashboard_app_testrunfiltersubscription', ['user_id', 'filter_id']) - - # Deleting model 'TestRunFilterSubscription' - db.delete_table('dashboard_app_testrunfiltersubscription') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.Test']", 'null': 'True', 'blank': 'True'}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestCase']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0020_auto__add_field_testrunfilter_build_number_attribute.py' --- dashboard_app/migrations/0020_auto__add_field_testrunfilter_build_number_attribute.py 2012-09-04 00:37:05 +0000 +++ dashboard_app/migrations/0020_auto__add_field_testrunfilter_build_number_attribute.py 1970-01-01 00:00:00 +0000 @@ -1,265 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'TestRunFilter.build_number_attribute' - db.add_column('dashboard_app_testrunfilter', 'build_number_attribute', - self.gf('django.db.models.fields.CharField')(max_length=1024, null=True, blank=True), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'TestRunFilter.build_number_attribute' - db.delete_column('dashboard_app_testrunfilter', 'build_number_attribute') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.Test']", 'null': 'True', 'blank': 'True'}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestCase']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0021_add_cast_integer.py' --- dashboard_app/migrations/0021_add_cast_integer.py 2012-09-06 03:12:26 +0000 +++ dashboard_app/migrations/0021_add_cast_integer.py 1970-01-01 00:00:00 +0000 @@ -1,280 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models -import django.db.utils - - -class Migration(SchemaMigration): - - def forwards(self, orm): - db.start_transaction() - try: - db.execute("CREATE LANGUAGE plpgsql") - except django.db.utils.DatabaseError: - db.rollback_transaction() - db.start_transaction() - db.execute(""" -CREATE FUNCTION convert_to_integer(v_input text) -RETURNS INTEGER AS $a$ -DECLARE v_int_value INTEGER DEFAULT NULL; -BEGIN - BEGIN - v_int_value := v_input::INTEGER; - EXCEPTION WHEN OTHERS THEN - RETURN NULL; - END; -RETURN v_int_value; -END; -$a$ LANGUAGE plpgsql; - """) - db.commit_transaction() - - def backwards(self, orm): - db.execute("""DROP FUNCTION convert_to_integer (v_input text)""") - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.Test']", 'null': 'True', 'blank': 'True'}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestCase']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] === removed file 'dashboard_app/migrations/0022_auto__add_testrunfiltertest__add_testrunfiltertestcase__del_field_test.py' --- dashboard_app/migrations/0022_auto__add_testrunfiltertest__add_testrunfiltertestcase__del_field_test.py 2012-09-12 01:16:05 +0000 +++ dashboard_app/migrations/0022_auto__add_testrunfiltertest__add_testrunfiltertestcase__del_field_test.py 1970-01-01 00:00:00 +0000 @@ -1,309 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'TestRunFilterTest' - db.create_table('dashboard_app_testrunfiltertest', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('test', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['dashboard_app.Test'])), - ('filter', self.gf('django.db.models.fields.related.ForeignKey')(related_name='tests', to=orm['dashboard_app.TestRunFilter'])), - ('index', self.gf('django.db.models.fields.PositiveIntegerField')()), - )) - db.send_create_signal('dashboard_app', ['TestRunFilterTest']) - - # Adding model 'TestRunFilterTestCase' - db.create_table('dashboard_app_testrunfiltertestcase', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('test_case', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['dashboard_app.TestCase'])), - ('test', self.gf('django.db.models.fields.related.ForeignKey')(related_name='cases', to=orm['dashboard_app.TestRunFilterTest'])), - ('index', self.gf('django.db.models.fields.PositiveIntegerField')()), - )) - db.send_create_signal('dashboard_app', ['TestRunFilterTestCase']) - - # Deleting field 'TestRunFilter.test' - db.delete_column('dashboard_app_testrunfilter', 'test_id') - - # Deleting field 'TestRunFilter.test_case' - db.delete_column('dashboard_app_testrunfilter', 'test_case_id') - - - def backwards(self, orm): - # Deleting model 'TestRunFilterTest' - db.delete_table('dashboard_app_testrunfiltertest') - - # Deleting model 'TestRunFilterTestCase' - db.delete_table('dashboard_app_testrunfiltertestcase') - - # Adding field 'TestRunFilter.test' - db.add_column('dashboard_app_testrunfilter', 'test', - self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.Test'], null=True, blank=True), - keep_default=False) - - # Adding field 'TestRunFilter.test_case' - db.add_column('dashboard_app_testrunfilter', 'test_case', - self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.TestCase'], null=True, blank=True), - keep_default=False) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0023_auto__add_field_testrunfilter_uploaded_by__add_field_testrunfilter_ena.py' --- dashboard_app/migrations/0023_auto__add_field_testrunfilter_uploaded_by__add_field_testrunfilter_ena.py 2012-09-24 03:50:34 +0000 +++ dashboard_app/migrations/0023_auto__add_field_testrunfilter_uploaded_by__add_field_testrunfilter_ena.py 1970-01-01 00:00:00 +0000 @@ -1,299 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding M2M table for field filters on 'ImageSet' - db.create_table('dashboard_app_imageset_filters', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('imageset', models.ForeignKey(orm['dashboard_app.imageset'], null=False)), - ('testrunfilter', models.ForeignKey(orm['dashboard_app.testrunfilter'], null=False)) - )) - db.create_unique('dashboard_app_imageset_filters', ['imageset_id', 'testrunfilter_id']) - - # Adding field 'TestRunFilter.uploaded_by' - db.add_column('dashboard_app_testrunfilter', 'uploaded_by', - self.gf('django.db.models.fields.related.ForeignKey')(blank=True, related_name='+', null=True, to=orm['auth.User']), - keep_default=False) - - # Adding field 'TestRunFilter.enable_as_image' - db.add_column('dashboard_app_testrunfilter', 'enable_as_image', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - - def backwards(self, orm): - # Removing M2M table for field filters on 'ImageSet' - db.delete_table('dashboard_app_imageset_filters') - - # Deleting field 'TestRunFilter.uploaded_by' - db.delete_column('dashboard_app_testrunfilter', 'uploaded_by_id') - - # Deleting field 'TestRunFilter.enable_as_image' - db.delete_column('dashboard_app_testrunfilter', 'enable_as_image') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.imageattribute': { - 'Meta': {'object_name': 'ImageAttribute'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'required_attributes'", 'to': "orm['dashboard_app.Image']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'filters': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.TestRunFilter']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'enable_as_image': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0024_auto__del_imageattribute__del_field_image_uploaded_by__del_field_image.py' --- dashboard_app/migrations/0024_auto__del_imageattribute__del_field_image_uploaded_by__del_field_image.py 2012-09-25 22:21:40 +0000 +++ dashboard_app/migrations/0024_auto__del_imageattribute__del_field_image_uploaded_by__del_field_image.py 1970-01-01 00:00:00 +0000 @@ -1,325 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting model 'ImageAttribute' - db.delete_table('dashboard_app_imageattribute') - - # Deleting field 'Image.uploaded_by' - db.delete_column('dashboard_app_image', 'uploaded_by_id') - - # Deleting field 'Image.build_number_attribute' - db.delete_column('dashboard_app_image', 'build_number_attribute') - - # Adding field 'Image.filter' - db.add_column('dashboard_app_image', 'filter', - self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', null=True, to=orm['dashboard_app.TestRunFilter']), - keep_default=False) - - # Removing M2M table for field bundle_streams on 'Image' - db.delete_table('dashboard_app_image_bundle_streams') - - # Removing M2M table for field filters on 'ImageSet' - db.delete_table('dashboard_app_imageset_filters') - - # Deleting field 'TestRunFilter.enable_as_image' - db.delete_column('dashboard_app_testrunfilter', 'enable_as_image') - - - def backwards(self, orm): - # Adding model 'ImageAttribute' - db.create_table('dashboard_app_imageattribute', ( - ('image', self.gf('django.db.models.fields.related.ForeignKey')(related_name='required_attributes', to=orm['dashboard_app.Image'])), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('value', self.gf('django.db.models.fields.CharField')(max_length=1024)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=1024)), - )) - db.send_create_signal('dashboard_app', ['ImageAttribute']) - - # Adding field 'Image.uploaded_by' - db.add_column('dashboard_app_image', 'uploaded_by', - self.gf('django.db.models.fields.related.ForeignKey')(to=orm['auth.User'], null=True, blank=True), - keep_default=False) - - - # User chose to not deal with backwards NULL issues for 'Image.build_number_attribute' - raise RuntimeError("Cannot reverse this migration. 'Image.build_number_attribute' and its values cannot be restored.") - # Deleting field 'Image.filter' - db.delete_column('dashboard_app_image', 'filter_id') - - # Adding M2M table for field bundle_streams on 'Image' - db.create_table('dashboard_app_image_bundle_streams', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('image', models.ForeignKey(orm['dashboard_app.image'], null=False)), - ('bundlestream', models.ForeignKey(orm['dashboard_app.bundlestream'], null=False)) - )) - db.create_unique('dashboard_app_image_bundle_streams', ['image_id', 'bundlestream_id']) - - # Adding M2M table for field filters on 'ImageSet' - db.create_table('dashboard_app_imageset_filters', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('imageset', models.ForeignKey(orm['dashboard_app.imageset'], null=False)), - ('testrunfilter', models.ForeignKey(orm['dashboard_app.testrunfilter'], null=False)) - )) - db.create_unique('dashboard_app_imageset_filters', ['imageset_id', 'testrunfilter_id']) - - # Adding field 'TestRunFilter.enable_as_image' - db.add_column('dashboard_app_testrunfilter', 'enable_as_image', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0025_auto__add_field_testrun_microseconds.py' --- dashboard_app/migrations/0025_auto__add_field_testrun_microseconds.py 2012-11-07 02:47:08 +0000 +++ dashboard_app/migrations/0025_auto__add_field_testrun_microseconds.py 1970-01-01 00:00:00 +0000 @@ -1,270 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding field 'TestRun.microseconds' - db.add_column('dashboard_app_testrun', 'microseconds', - self.gf('django.db.models.fields.BigIntegerField')(null=True, blank=True), - keep_default=False) - - - def backwards(self, orm): - # Deleting field 'TestRun.microseconds' - db.delete_column('dashboard_app_testrun', 'microseconds') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0026_auto__add_pmqabundlestream.py' --- dashboard_app/migrations/0026_auto__add_pmqabundlestream.py 2013-01-09 02:52:50 +0000 +++ dashboard_app/migrations/0026_auto__add_pmqabundlestream.py 1970-01-01 00:00:00 +0000 @@ -1,277 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'PMQABundleStream' - db.create_table('dashboard_app_pmqabundlestream', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('bundle_stream', self.gf('django.db.models.fields.related.ForeignKey')(related_name='+', to=orm['dashboard_app.BundleStream'])), - )) - db.send_create_signal('dashboard_app', ['PMQABundleStream']) - - - def backwards(self, orm): - # Deleting model 'PMQABundleStream' - db.delete_table('dashboard_app_pmqabundlestream') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.pmqabundlestream': { - 'Meta': {'object_name': 'PMQABundleStream'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.BundleStream']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testingeffort': { - 'Meta': {'object_name': 'TestingEffort'}, - 'description': ('django.db.models.fields.TextField', [], {}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'project': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'testing_efforts'", 'to': "orm['lava_projects.Project']"}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'testing_efforts'", 'symmetrical': 'False', 'to': "orm['dashboard_app.Tag']"}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - }, - 'lava_projects.project': { - 'Meta': {'object_name': 'Project'}, - 'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'identifier': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '100'}), - 'is_aggregate': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'registered_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'projects'", 'to': "orm['auth.User']"}), - 'registered_on': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0027_auto__del_testingeffort.py' --- dashboard_app/migrations/0027_auto__del_testingeffort.py 2013-01-11 16:25:54 +0000 +++ dashboard_app/migrations/0027_auto__del_testingeffort.py 1970-01-01 00:00:00 +0000 @@ -1,269 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting model 'TestingEffort' - db.delete_table('dashboard_app_testingeffort') - - # Removing M2M table for field tags on 'TestingEffort' - db.delete_table('dashboard_app_testingeffort_tags') - - - def backwards(self, orm): - # Adding model 'TestingEffort' - db.create_table('dashboard_app_testingeffort', ( - ('description', self.gf('django.db.models.fields.TextField')()), - ('project', self.gf('django.db.models.fields.related.ForeignKey')(related_name='testing_efforts', to=orm['lava_projects.Project'])), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), - )) - db.send_create_signal('dashboard_app', ['TestingEffort']) - - # Adding M2M table for field tags on 'TestingEffort' - db.create_table('dashboard_app_testingeffort_tags', ( - ('id', models.AutoField(verbose_name='ID', primary_key=True, auto_created=True)), - ('testingeffort', models.ForeignKey(orm['dashboard_app.testingeffort'], null=False)), - ('tag', models.ForeignKey(orm['dashboard_app.tag'], null=False)) - )) - db.create_unique('dashboard_app_testingeffort_tags', ['testingeffort_id', 'tag_id']) - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.pmqabundlestream': { - 'Meta': {'object_name': 'PMQABundleStream'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.BundleStream']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '64'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0028_auto__chg_field_test_test_id__chg_field_test_name.py' --- dashboard_app/migrations/0028_auto__chg_field_test_test_id__chg_field_test_name.py 2013-02-07 22:31:00 +0000 +++ dashboard_app/migrations/0028_auto__chg_field_test_test_id__chg_field_test_name.py 1970-01-01 00:00:00 +0000 @@ -1,258 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - - # Changing field 'Test.test_id' - db.alter_column('dashboard_app_test', 'test_id', self.gf('django.db.models.fields.CharField')(unique=True, max_length=1024)) - - # Changing field 'Test.name' - db.alter_column('dashboard_app_test', 'name', self.gf('django.db.models.fields.CharField')(max_length=1024)) - - def backwards(self, orm): - - # Changing field 'Test.test_id' - db.alter_column('dashboard_app_test', 'test_id', self.gf('django.db.models.fields.CharField')(max_length=64, unique=True)) - - # Changing field 'Test.name' - db.alter_column('dashboard_app_test', 'name', self.gf('django.db.models.fields.CharField')(max_length=64)) - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.pmqabundlestream': { - 'Meta': {'object_name': 'PMQABundleStream'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.BundleStream']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0029_auto__add_testdefinition.py' --- dashboard_app/migrations/0029_auto__add_testdefinition.py 2013-04-01 10:16:02 +0000 +++ dashboard_app/migrations/0029_auto__add_testdefinition.py 1970-01-01 00:00:00 +0000 @@ -1,281 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'TestDefinition' - db.create_table('dashboard_app_testdefinition', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(unique=True, max_length=512)), - ('version', self.gf('django.db.models.fields.CharField')(max_length=256)), - ('description', self.gf('django.db.models.fields.TextField')()), - ('format', self.gf('django.db.models.fields.CharField')(max_length=128)), - ('location', self.gf('django.db.models.fields.CharField')(default='LOCAL', max_length=64)), - ('url', self.gf('django.db.models.fields.CharField')(max_length=1024)), - ('environment', self.gf('django.db.models.fields.CharField')(max_length=256)), - ('target_os', self.gf('django.db.models.fields.CharField')(max_length=512)), - ('target_dev_types', self.gf('django.db.models.fields.CharField')(max_length=512)), - ('content', self.gf('django.db.models.fields.files.FileField')(max_length=100, null=True, blank=True)), - ('mime_type', self.gf('django.db.models.fields.CharField')(default='text/plain', max_length=64)), - )) - db.send_create_signal('dashboard_app', ['TestDefinition']) - - - def backwards(self, orm): - # Deleting model 'TestDefinition' - db.delete_table('dashboard_app_testdefinition') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.pmqabundlestream': { - 'Meta': {'object_name': 'PMQABundleStream'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.BundleStream']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testdefinition': { - 'Meta': {'object_name': 'TestDefinition'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'environment': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'format': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'location': ('django.db.models.fields.CharField', [], {'default': "'LOCAL'", 'max_length': '64'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'default': "'text/plain'", 'max_length': '64'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), - 'target_dev_types': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'target_os': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'url': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '256'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0030_auto__add_imagecharttestcase__add_imagereport__add_imagecharttestrun__.py' --- dashboard_app/migrations/0030_auto__add_imagecharttestcase__add_imagereport__add_imagecharttestrun__.py 2013-09-13 14:16:05 +0000 +++ dashboard_app/migrations/0030_auto__add_imagecharttestcase__add_imagereport__add_imagecharttestrun__.py 1970-01-01 00:00:00 +0000 @@ -1,345 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Adding model 'ImageChartTestCase' - db.create_table('dashboard_app_imagecharttestcase', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('image_chart', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.ImageReportChart'])), - ('test_case', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.TestCase'])), - ('name', self.gf('django.db.models.fields.CharField')(max_length=200)), - )) - db.send_create_signal('dashboard_app', ['ImageChartTestCase']) - - # Adding model 'ImageReport' - db.create_table('dashboard_app_imagereport', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.SlugField')(unique=True, max_length=1024)), - ('description', self.gf('django.db.models.fields.TextField')(null=True, blank=True)), - )) - db.send_create_signal('dashboard_app', ['ImageReport']) - - # Adding model 'ImageChartTestRun' - db.create_table('dashboard_app_imagecharttestrun', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('image_chart', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.ImageReportChart'])), - ('test_run', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.TestRun'])), - ('name', self.gf('django.db.models.fields.CharField')(max_length=200)), - )) - db.send_create_signal('dashboard_app', ['ImageChartTestRun']) - - # Adding model 'ImageReportChart' - db.create_table('dashboard_app_imagereportchart', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=100)), - ('image_report', self.gf('django.db.models.fields.related.ForeignKey')(default=None, to=orm['dashboard_app.ImageReport'])), - ('chart_type', self.gf('django.db.models.fields.CharField')(max_length=20)), - ('representation', self.gf('django.db.models.fields.CharField')(max_length=20)), - ('target_goal', self.gf('django.db.models.fields.DecimalField')(null=True, max_digits=10, decimal_places=5, blank=True)), - ('is_interactive', self.gf('django.db.models.fields.BooleanField')(default=False)), - ('is_data_table_visible', self.gf('django.db.models.fields.BooleanField')(default=False)), - )) - db.send_create_signal('dashboard_app', ['ImageReportChart']) - - - def backwards(self, orm): - # Deleting model 'ImageChartTestCase' - db.delete_table('dashboard_app_imagecharttestcase') - - # Deleting model 'ImageReport' - db.delete_table('dashboard_app_imagereport') - - # Deleting model 'ImageChartTestRun' - db.delete_table('dashboard_app_imagecharttestrun') - - # Deleting model 'ImageReportChart' - db.delete_table('dashboard_app_imagereportchart') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imagecharttestcase': { - 'Meta': {'object_name': 'ImageChartTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image_chart': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.ImageReportChart']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestCase']"}) - }, - 'dashboard_app.imagecharttestrun': { - 'Meta': {'object_name': 'ImageChartTestRun'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image_chart': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.ImageReportChart']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.imagereport': { - 'Meta': {'object_name': 'ImageReport'}, - 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imagereportchart': { - 'Meta': {'object_name': 'ImageReportChart'}, - 'chart_type': ('django.db.models.fields.CharField', [], {'max_length': '20'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image_report': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['dashboard_app.ImageReport']"}), - 'is_data_table_visible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_interactive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'representation': ('django.db.models.fields.CharField', [], {'max_length': '20'}), - 'target_goal': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '10', 'decimal_places': '5', 'blank': 'True'}), - 'test_cases': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.TestCase']", 'through': "orm['dashboard_app.ImageChartTestCase']", 'symmetrical': 'False'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.TestRun']", 'through': "orm['dashboard_app.ImageChartTestRun']", 'symmetrical': 'False'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.pmqabundlestream': { - 'Meta': {'object_name': 'PMQABundleStream'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.BundleStream']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testdefinition': { - 'Meta': {'object_name': 'TestDefinition'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'environment': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'format': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'location': ('django.db.models.fields.CharField', [], {'default': "'LOCAL'", 'max_length': '64'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'default': "'text/plain'", 'max_length': '64'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), - 'target_dev_types': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'target_os': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'url': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '256'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/0031_auto__del_imagecharttestrun__add_imagecharttest__add_unique_imagechart.py' --- dashboard_app/migrations/0031_auto__del_imagecharttestrun__add_imagecharttest__add_unique_imagechart.py 2013-09-13 11:45:52 +0000 +++ dashboard_app/migrations/0031_auto__del_imagecharttestrun__add_imagecharttest__add_unique_imagechart.py 1970-01-01 00:00:00 +0000 @@ -1,388 +0,0 @@ -# -*- coding: utf-8 -*- -import datetime -from south.db import db -from south.v2 import SchemaMigration -from django.db import models - - -class Migration(SchemaMigration): - - def forwards(self, orm): - # Deleting model 'ImageChartTestRun' - db.delete_table('dashboard_app_imagecharttestrun') - - # Adding model 'ImageChartTest' - db.create_table('dashboard_app_imagecharttest', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('image_chart_filter', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.ImageChartFilter'])), - ('test', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.Test'])), - ('name', self.gf('django.db.models.fields.CharField')(max_length=200)), - )) - db.send_create_signal('dashboard_app', ['ImageChartTest']) - - # Adding unique constraint on 'ImageChartTest', fields ['image_chart_filter', 'test'] - db.create_unique('dashboard_app_imagecharttest', ['image_chart_filter_id', 'test_id']) - - # Adding model 'ImageChartFilter' - db.create_table('dashboard_app_imagechartfilter', ( - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('image_chart', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.ImageReportChart'])), - ('filter', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.TestRunFilter'], null=True, on_delete=models.SET_NULL)), - ('representation', self.gf('django.db.models.fields.CharField')(default='lines', max_length=20)), - )) - db.send_create_signal('dashboard_app', ['ImageChartFilter']) - - # Deleting field 'ImageChartTestCase.image_chart' - db.delete_column('dashboard_app_imagecharttestcase', 'image_chart_id') - - # Adding field 'ImageChartTestCase.image_chart_filter' - db.add_column('dashboard_app_imagecharttestcase', 'image_chart_filter', - self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['dashboard_app.ImageChartFilter']), - keep_default=False) - - # Adding unique constraint on 'ImageChartTestCase', fields ['image_chart_filter', 'test_case'] - db.create_unique('dashboard_app_imagecharttestcase', ['image_chart_filter_id', 'test_case_id']) - - # Adding field 'ImageReport.is_published' - db.add_column('dashboard_app_imagereport', 'is_published', - self.gf('django.db.models.fields.BooleanField')(default=False), - keep_default=False) - - # Deleting field 'ImageReportChart.representation' - db.delete_column('dashboard_app_imagereportchart', 'representation') - - # Adding field 'ImageReportChart.description' - db.add_column('dashboard_app_imagereportchart', 'description', - self.gf('django.db.models.fields.TextField')(null=True, blank=True), - keep_default=False) - - - def backwards(self, orm): - # Removing unique constraint on 'ImageChartTestCase', fields ['image_chart_filter', 'test_case'] - db.delete_unique('dashboard_app_imagecharttestcase', ['image_chart_filter_id', 'test_case_id']) - - # Removing unique constraint on 'ImageChartTest', fields ['image_chart_filter', 'test'] - db.delete_unique('dashboard_app_imagecharttest', ['image_chart_filter_id', 'test_id']) - - # Adding model 'ImageChartTestRun' - db.create_table('dashboard_app_imagecharttestrun', ( - ('test_run', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.TestRun'])), - ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)), - ('name', self.gf('django.db.models.fields.CharField')(max_length=200)), - ('image_chart', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['dashboard_app.ImageReportChart'])), - )) - db.send_create_signal('dashboard_app', ['ImageChartTestRun']) - - # Deleting model 'ImageChartTest' - db.delete_table('dashboard_app_imagecharttest') - - # Deleting model 'ImageChartFilter' - db.delete_table('dashboard_app_imagechartfilter') - - # Adding field 'ImageChartTestCase.image_chart' - db.add_column('dashboard_app_imagecharttestcase', 'image_chart', - self.gf('django.db.models.fields.related.ForeignKey')(default=0, to=orm['dashboard_app.ImageReportChart']), - keep_default=False) - - # Deleting field 'ImageChartTestCase.image_chart_filter' - db.delete_column('dashboard_app_imagecharttestcase', 'image_chart_filter_id') - - # Deleting field 'ImageReport.is_published' - db.delete_column('dashboard_app_imagereport', 'is_published') - - # Adding field 'ImageReportChart.representation' - db.add_column('dashboard_app_imagereportchart', 'representation', - self.gf('django.db.models.fields.CharField')(default='pass/fail', max_length=20), - keep_default=False) - - # Deleting field 'ImageReportChart.description' - db.delete_column('dashboard_app_imagereportchart', 'description') - - - models = { - 'auth.group': { - 'Meta': {'object_name': 'Group'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}), - 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}) - }, - 'auth.permission': { - 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'}, - 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'}) - }, - 'auth.user': { - 'Meta': {'object_name': 'User'}, - 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}), - 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}), - 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}), - 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}), - 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}), - 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}) - }, - 'contenttypes.contenttype': { - 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"}, - 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}) - }, - 'dashboard_app.attachment': { - 'Meta': {'object_name': 'Attachment'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True'}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'max_length': '64'}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'public_url': ('django.db.models.fields.URLField', [], {'max_length': '512', 'blank': 'True'}) - }, - 'dashboard_app.bundle': { - 'Meta': {'ordering': "['-uploaded_on']", 'object_name': 'Bundle'}, - '_gz_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'gz_content'"}), - '_raw_content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'db_column': "'content'"}), - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'bundles'", 'to': "orm['dashboard_app.BundleStream']"}), - 'content_filename': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'content_sha1': ('django.db.models.fields.CharField', [], {'max_length': '40', 'unique': 'True', 'null': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_deserialized': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'uploaded_bundles'", 'null': 'True', 'to': "orm['auth.User']"}), - 'uploaded_on': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.utcnow'}) - }, - 'dashboard_app.bundledeserializationerror': { - 'Meta': {'object_name': 'BundleDeserializationError'}, - 'bundle': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'deserialization_error'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.Bundle']"}), - 'error_message': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'traceback': ('django.db.models.fields.TextField', [], {'max_length': '32768'}) - }, - 'dashboard_app.bundlestream': { - 'Meta': {'object_name': 'BundleStream'}, - 'group': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.Group']", 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'pathname': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '128'}), - 'slug': ('django.db.models.fields.CharField', [], {'max_length': '64', 'blank': 'True'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.hardwaredevice': { - 'Meta': {'object_name': 'HardwareDevice'}, - 'description': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'device_type': ('django.db.models.fields.CharField', [], {'max_length': '32'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.image': { - 'Meta': {'object_name': 'Image'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'null': 'True', 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imagechartfilter': { - 'Meta': {'object_name': 'ImageChartFilter'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']", 'null': 'True', 'on_delete': 'models.SET_NULL'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image_chart': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.ImageReportChart']"}), - 'representation': ('django.db.models.fields.CharField', [], {'default': "'lines'", 'max_length': '20'}) - }, - 'dashboard_app.imagecharttest': { - 'Meta': {'unique_together': "(('image_chart_filter', 'test'),)", 'object_name': 'ImageChartTest'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image_chart_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.ImageChartFilter']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.imagecharttestcase': { - 'Meta': {'unique_together': "(('image_chart_filter', 'test_case'),)", 'object_name': 'ImageChartTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image_chart_filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.ImageChartFilter']"}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '200'}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestCase']"}) - }, - 'dashboard_app.imagereport': { - 'Meta': {'object_name': 'ImageReport'}, - 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'is_published': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.imagereportchart': { - 'Meta': {'object_name': 'ImageReportChart'}, - 'chart_type': ('django.db.models.fields.CharField', [], {'default': "'pass/fail'", 'max_length': '20'}), - 'description': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'image_report': ('django.db.models.fields.related.ForeignKey', [], {'default': 'None', 'to': "orm['dashboard_app.ImageReport']"}), - 'is_data_table_visible': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'is_interactive': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'}), - 'target_goal': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '10', 'decimal_places': '5', 'blank': 'True'}) - }, - 'dashboard_app.imageset': { - 'Meta': {'object_name': 'ImageSet'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'images': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.Image']", 'symmetrical': 'False'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.launchpadbug': { - 'Meta': {'object_name': 'LaunchpadBug'}, - 'bug_id': ('django.db.models.fields.PositiveIntegerField', [], {'unique': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'test_runs': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'launchpad_bugs'", 'symmetrical': 'False', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.namedattribute': { - 'Meta': {'unique_together': "(('object_id', 'name'),)", 'object_name': 'NamedAttribute'}, - 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {}), - 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'value': ('django.db.models.fields.TextField', [], {}) - }, - 'dashboard_app.pmqabundlestream': { - 'Meta': {'object_name': 'PMQABundleStream'}, - 'bundle_stream': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.BundleStream']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}) - }, - 'dashboard_app.softwarepackage': { - 'Meta': {'unique_together': "(('name', 'version'),)", 'object_name': 'SoftwarePackage'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwarepackagescratch': { - 'Meta': {'object_name': 'SoftwarePackageScratch'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '128'}) - }, - 'dashboard_app.softwaresource': { - 'Meta': {'object_name': 'SoftwareSource'}, - 'branch_revision': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'branch_url': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'branch_vcs': ('django.db.models.fields.CharField', [], {'max_length': '10'}), - 'commit_timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'project_name': ('django.db.models.fields.CharField', [], {'max_length': '32'}) - }, - 'dashboard_app.tag': { - 'Meta': {'object_name': 'Tag'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '256'}) - }, - 'dashboard_app.test': { - 'Meta': {'object_name': 'Test'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'blank': 'True'}), - 'test_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '1024'}) - }, - 'dashboard_app.testcase': { - 'Meta': {'unique_together': "(('test', 'test_case_id'),)", 'object_name': 'TestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.TextField', [], {'blank': 'True'}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_cases'", 'to': "orm['dashboard_app.Test']"}), - 'test_case_id': ('django.db.models.fields.TextField', [], {}), - 'units': ('django.db.models.fields.TextField', [], {'blank': 'True'}) - }, - 'dashboard_app.testdefinition': { - 'Meta': {'object_name': 'TestDefinition'}, - 'content': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}), - 'description': ('django.db.models.fields.TextField', [], {}), - 'environment': ('django.db.models.fields.CharField', [], {'max_length': '256'}), - 'format': ('django.db.models.fields.CharField', [], {'max_length': '128'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'location': ('django.db.models.fields.CharField', [], {'default': "'LOCAL'", 'max_length': '64'}), - 'mime_type': ('django.db.models.fields.CharField', [], {'default': "'text/plain'", 'max_length': '64'}), - 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '512'}), - 'target_dev_types': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'target_os': ('django.db.models.fields.CharField', [], {'max_length': '512'}), - 'url': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'version': ('django.db.models.fields.CharField', [], {'max_length': '256'}) - }, - 'dashboard_app.testresult': { - 'Meta': {'ordering': "('_order',)", 'object_name': 'TestResult'}, - '_order': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'filename': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'lineno': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'measurement': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '20', 'decimal_places': '10', 'blank': 'True'}), - 'message': ('django.db.models.fields.TextField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'relative_index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'result': ('django.db.models.fields.PositiveSmallIntegerField', [], {}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'test_results'", 'null': 'True', 'to': "orm['dashboard_app.TestCase']"}), - 'test_run': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_results'", 'to': "orm['dashboard_app.TestRun']"}), - 'timestamp': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}) - }, - 'dashboard_app.testrun': { - 'Meta': {'ordering': "['-import_assigned_date']", 'object_name': 'TestRun'}, - 'analyzer_assigned_date': ('django.db.models.fields.DateTimeField', [], {}), - 'analyzer_assigned_uuid': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '36'}), - 'bundle': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Bundle']"}), - 'devices': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.HardwareDevice']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'import_assigned_date': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}), - 'microseconds': ('django.db.models.fields.BigIntegerField', [], {'null': 'True', 'blank': 'True'}), - 'packages': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwarePackage']"}), - 'sources': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.SoftwareSource']"}), - 'sw_image_desc': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}), - 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "'test_runs'", 'blank': 'True', 'to': "orm['dashboard_app.Tag']"}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'test_runs'", 'to': "orm['dashboard_app.Test']"}), - 'time_check_performed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}) - }, - 'dashboard_app.testrundenormalization': { - 'Meta': {'object_name': 'TestRunDenormalization'}, - 'count_fail': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_pass': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_skip': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'count_unknown': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test_run': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'denormalization'", 'unique': 'True', 'primary_key': 'True', 'to': "orm['dashboard_app.TestRun']"}) - }, - 'dashboard_app.testrunfilter': { - 'Meta': {'unique_together': "(('owner', 'name'),)", 'object_name': 'TestRunFilter'}, - 'build_number_attribute': ('django.db.models.fields.CharField', [], {'max_length': '1024', 'null': 'True', 'blank': 'True'}), - 'bundle_streams': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['dashboard_app.BundleStream']", 'symmetrical': 'False'}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.SlugField', [], {'max_length': '1024'}), - 'owner': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}), - 'public': ('django.db.models.fields.BooleanField', [], {'default': 'False'}), - 'uploaded_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'+'", 'null': 'True', 'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfilterattribute': { - 'Meta': {'object_name': 'TestRunFilterAttribute'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'attributes'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'name': ('django.db.models.fields.CharField', [], {'max_length': '1024'}), - 'value': ('django.db.models.fields.CharField', [], {'max_length': '1024'}) - }, - 'dashboard_app.testrunfiltersubscription': { - 'Meta': {'unique_together': "(('user', 'filter'),)", 'object_name': 'TestRunFilterSubscription'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'level': ('django.db.models.fields.IntegerField', [], {'default': '0'}), - 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"}) - }, - 'dashboard_app.testrunfiltertest': { - 'Meta': {'object_name': 'TestRunFilterTest'}, - 'filter': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tests'", 'to': "orm['dashboard_app.TestRunFilter']"}), - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.Test']"}) - }, - 'dashboard_app.testrunfiltertestcase': { - 'Meta': {'object_name': 'TestRunFilterTestCase'}, - 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}), - 'index': ('django.db.models.fields.PositiveIntegerField', [], {}), - 'test': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'cases'", 'to': "orm['dashboard_app.TestRunFilterTest']"}), - 'test_case': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'+'", 'to': "orm['dashboard_app.TestCase']"}) - } - } - - complete_apps = ['dashboard_app'] \ No newline at end of file === removed file 'dashboard_app/migrations/__init__.py' === removed file 'dashboard_app/models.py' --- dashboard_app/models.py 2013-09-13 14:16:05 +0000 +++ dashboard_app/models.py 1970-01-01 00:00:00 +0000 @@ -1,1964 +0,0 @@ -# Copyright (C) 2010, 2011 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - -""" -Database models of the Dashboard application -""" - -import datetime -import errno -import gzip -import hashlib -import logging -import os -import simplejson -import traceback -import contextlib - -from django.conf import settings -from django.contrib.auth.models import User -from django.contrib.contenttypes import generic -from django.contrib.contenttypes.models import ContentType -from django.contrib.sites.models import Site -from django.core.exceptions import ImproperlyConfigured, ValidationError -from django.core.files import locks, File -from django.core.files.storage import FileSystemStorage -from django.core.mail import send_mail -from django.core.urlresolvers import reverse -from django.db import models -from django.db.models.fields import FieldDoesNotExist -from django.db.models.signals import post_delete -from django.dispatch import receiver -from django.template import Template, Context -from django.template.defaultfilters import filesizeformat -from django.template.loader import render_to_string -from django.utils.translation import ugettext as _ -from django.utils.translation import ungettext - -from django_restricted_resource.models import RestrictedResource -from linaro_dashboard_bundle.io import DocumentIO - -from dashboard_app.helpers import BundleDeserializer -from dashboard_app.managers import BundleManager, TestRunDenormalizationManager -from dashboard_app.repositories import RepositoryItem -from dashboard_app.repositories.data_report import DataReportRepository -from dashboard_app.repositories.data_view import DataViewRepository -from dashboard_app.signals import bundle_was_deserialized - - -# Fix some django issues we ran into -from dashboard_app.patches import patch -patch() - - -def _help_max_length(max_length): - return ungettext( - u"Maximum length: {0} character", - u"Maximum length: {0} characters", - max_length).format(max_length) - - -class SoftwarePackage(models.Model): - """ - Model for software packages. - """ - name = models.CharField( - max_length = 128, - verbose_name = _(u"Package name"), - help_text = _help_max_length(128)) - - version = models.CharField( - max_length = 128, - verbose_name = _(u"Package version"), - help_text = _help_max_length(128)) - - class Meta: - unique_together = (('name', 'version')) - - def __unicode__(self): - return _(u"{name} {version}").format( - name = self.name, - version = self.version) - - @property - def link_to_packages_ubuntu_com(self): - return u"http://packages.ubuntu.com/{name}".format(name=self.name) - - -class SoftwarePackageScratch(models.Model): - """ - Staging area for SoftwarePackage data. - - The code that keeps SoftwarePackage dumps data into here before more - carefully inserting it into the real SoftwarePackage table. - - No data should ever be committed in this table. It would be a temporary - table, but oddities in how the sqlite DB-API wrapper handles transactions - makes this impossible. - """ - name = models.CharField(max_length=128) - version = models.CharField(max_length=128) - - -class NamedAttribute(models.Model): - """ - Model for adding generic named attributes - to arbitrary other model instances. - - Example: - class Foo(Model): - attributes = generic.GenericRelation(NamedAttribute) - """ - name = models.TextField() - - value = models.TextField() - - # Content type plumbing - content_type = models.ForeignKey(ContentType) - object_id = models.PositiveIntegerField() - content_object = generic.GenericForeignKey('content_type', 'object_id') - - def __unicode__(self): - return _(u"{name}: {value}").format( - name = self.name, - value = self.value) - - class Meta: - unique_together = (('object_id', 'name')) - - -class HardwareDevice(models.Model): - """ - Model for hardware devices - - All devices are simplified into an instance of pre-defined class - with arbitrary key-value attributes. - """ - device_type = models.CharField( - choices = ( - (u"device.cpu", _(u"CPU")), - (u"device.mem", _(u"Memory")), - (u"device.usb", _(u"USB device")), - (u"device.pci", _(u"PCI device")), - (u"device.board", _(u"Board/Motherboard"))), - help_text = _(u"One of pre-defined device types"), - max_length = 32, - verbose_name = _(u"Device Type"), - ) - - description = models.CharField( - help_text = _(u"Human readable device summary.") + " " + _help_max_length(256), - max_length = 256, - verbose_name = _(u"Description"), - ) - - attributes = generic.GenericRelation(NamedAttribute) - - def __unicode__(self): - return self.description - - -class BundleStream(RestrictedResource): - """ - Model for "streams" of bundles. - - Basically it's a named collection of bundles, like directory just - without the nesting. A simple ACL scheme is also supported, - a bundle may be uploaded by: - - specific user when user field is set - - users of a specific group when group field is set - - anyone when neither user nor group is set - """ - PATHNAME_ANONYMOUS = "anonymous" - PATHNAME_PUBLIC = "public" - PATHNAME_PRIVATE = "private" - PATHNAME_PERSONAL = "personal" - PATHNAME_TEAM = "team" - - slug = models.CharField( - blank = True, - help_text = (_(u"Name that you will use when uploading bundles.") - + " " + _help_max_length(64)), - max_length = 64, - verbose_name = _(u"Slug"), - ) - - name = models.CharField( - blank = True, - help_text = _help_max_length(64), - max_length = 64, - verbose_name = _(u"Name"), - ) - - pathname = models.CharField( - max_length = 128, - editable = False, - unique = True, - ) - - is_anonymous = models.BooleanField() - - def __unicode__(self): - return self.pathname - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.views.bundle_list", [self.pathname]) - - def get_test_run_count(self): - return TestRun.objects.filter(bundle__bundle_stream=self).count() - - def clean(self): - if self.is_anonymous and not self.is_public: - raise ValidationError( - 'Anonymous streams must be public') - return super(BundleStream, self).clean() - - def save(self, *args, **kwargs): - """ - Save this instance. - - Calls self.clean() to ensure that constraints are met. - Updates pathname to reflect user/group/slug changes. - """ - self.pathname = self._calc_pathname() - self.clean() - return super(BundleStream, self).save(*args, **kwargs) - - def _calc_pathname(self): - """ - Pseudo pathname-like ID of this stream. - - This pathname is user visible and will be presented to users - when they want to interact with this bundle stream. The - pathnames are unique and this is enforced at database level (the - user and name are unique together). - """ - if self.is_anonymous: - parts = ['', self.PATHNAME_ANONYMOUS] - else: - if self.is_public: - parts = ['', self.PATHNAME_PUBLIC] - else: - parts = ['', self.PATHNAME_PRIVATE] - if self.user is not None: - parts.append(self.PATHNAME_PERSONAL) - parts.append(self.user.username) - elif self.group is not None: - parts.append(self.PATHNAME_TEAM) - parts.append(self.group.name) - if self.slug: - parts.append(self.slug) - parts.append('') - return u"/".join(parts) - - @classmethod - def parse_pathname(cls, pathname): - """ - Parse BundleStream pathname. - - Returns user, group, slug, is_public, is_anonymous - Raises ValueError if the pathname is not well formed - """ - if not pathname.endswith('/'): - pathname = pathname + '/' - pathname_parts = pathname.split('/') - if len(pathname_parts) < 3: - raise ValueError("Pathname too short: %r" % pathname) - if pathname_parts[0] != '': - raise ValueError("Pathname must be absolute: %r" % pathname) - if pathname_parts[1] == cls.PATHNAME_ANONYMOUS: - user = None - group = None - slug = pathname_parts[2] - correct_length = 2 - is_anonymous = True - is_public = True - else: - is_anonymous = False - if pathname_parts[1] == cls.PATHNAME_PUBLIC: - is_public = True - elif pathname_parts[1] == cls.PATHNAME_PRIVATE: - is_public = False - else: - raise ValueError("Invalid pathname privacy designator:" - " %r (full pathname: %r)" % (pathname_parts[1], - pathname)) - if pathname_parts[2] == cls.PATHNAME_PERSONAL: - if len(pathname_parts) < 4: - raise ValueError("Pathname too short: %r" % pathname) - user = pathname_parts[3] - group = None - slug = pathname_parts[4] - correct_length = 4 - elif pathname_parts[2] == cls.PATHNAME_TEAM: - if len(pathname_parts) < 4: - raise ValueError("Pathname too short: %r" % pathname) - user = None - group = pathname_parts[3] - slug = pathname_parts[4] - correct_length = 4 - else: - raise ValueError("Invalid pathname ownership designator:" - " %r (full pathname %r)" % (pathname[2], - pathname)) - if slug != '': - correct_length += 1 - if pathname_parts[correct_length:] != ['']: - raise ValueError("Junk after pathname: %r" % pathname) - return user, group, slug, is_public, is_anonymous - - def can_upload(self, user): - """ - Return True if the user can upload bundles here - """ - return self.is_anonymous or self.is_owned_by(user) - - -class GzipFileSystemStorage(FileSystemStorage): - - def _open(self, name, mode='rb'): - full_path = self.path(name) - gzip_file = gzip.GzipFile(full_path, mode) - gzip_file.name = full_path - return File(gzip_file) - - # This is a copy-paste-hack of FileSystemStorage._save - def _save(self, name, content): - full_path = self.path(name) - - directory = os.path.dirname(full_path) - if not os.path.exists(directory): - os.makedirs(directory) - elif not os.path.isdir(directory): - raise IOError("%s exists and is not a directory." % directory) - - # There's a potential race condition between get_available_name and - # saving the file; it's possible that two threads might return the - # same name, at which point all sorts of fun happens. So we need to - # try to create the file, but if it already exists we have to go back - # to get_available_name() and try again. - - while True: - try: - # This fun binary flag incantation makes os.open throw an - # OSError if the file already exists before we open it. - fd = os.open(full_path, os.O_WRONLY | os.O_CREAT | os.O_EXCL | getattr(os, 'O_BINARY', 0)) - # This line, and the use of gz_file.write below, are the - # changes from the original version of this. - gz_file = gzip.GzipFile(fileobj=os.fdopen(fd, 'wb')) - try: - locks.lock(fd, locks.LOCK_EX) - for chunk in content.chunks(): - gz_file.write(chunk) - finally: - locks.unlock(fd) - gz_file.close() - except OSError, e: - if e.errno == errno.EEXIST: - # Ooops, the file exists. We need a new file name. - name = self.get_available_name(name) - full_path = self.path(name) - else: - raise - else: - # OK, the file save worked. Break out of the loop. - break - - if settings.FILE_UPLOAD_PERMISSIONS is not None: - os.chmod(full_path, settings.FILE_UPLOAD_PERMISSIONS) - - return name - - -class Bundle(models.Model): - """ - Model for "Dashboard Bundles" - """ - bundle_stream = models.ForeignKey(BundleStream, - verbose_name = _(u"Stream"), - related_name = 'bundles') - - uploaded_by = models.ForeignKey(User, - verbose_name = _(u"Uploaded by"), - help_text = _(u"The user who submitted this bundle"), - related_name = 'uploaded_bundles', - null = True, - blank = True) - - uploaded_on = models.DateTimeField( - verbose_name = _(u"Uploaded on"), - editable = False, - default = datetime.datetime.utcnow) - - is_deserialized = models.BooleanField( - verbose_name = _(u"Is deserialized"), - help_text = _(u"Set when document has been analyzed and loaded" - " into the database"), - editable = False) - - _raw_content = models.FileField( - verbose_name = _(u"Content"), - help_text = _(u"Document in Dashboard Bundle Format 1.0"), - upload_to = 'bundles', - null = True, - db_column = 'content') - - _gz_content = models.FileField( - verbose_name = _(u"Compressed content"), - help_text = _(u"Compressed document in Dashboard Bundle Format 1.0"), - upload_to = 'compressed-bundles', - null = True, - db_column = 'gz_content', - storage = GzipFileSystemStorage()) - - def _get_content(self): - r = self._gz_content - if not r: - return self._raw_content - else: - return r - - content = property(_get_content) - - def compress(self): - c = self._raw_content - self._gz_content.save(c.name, c) - c.delete() - - content_sha1 = models.CharField( - editable = False, - max_length = 40, - null = True, - unique = True) - - content_filename = models.CharField( - verbose_name = _(u"Content file name"), - help_text = _(u"Name of the originally uploaded bundle"), - max_length = 256) - - objects = BundleManager() - - def __unicode__(self): - return _(u"Bundle {0}").format(self.content_sha1) - - class Meta: - ordering = ['-uploaded_on'] - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.views.bundle_detail", [self.bundle_stream.pathname, self.content_sha1]) - - def get_permalink(self): - return reverse("dashboard_app.views.redirect_to_bundle", args=[self.content_sha1]) - - def save(self, *args, **kwargs): - if self.content: - try: - self.content.open('rb') - sha1 = hashlib.sha1() - for chunk in self.content.chunks(): - sha1.update(chunk) - self.content_sha1 = sha1.hexdigest() - finally: - self.content.close() - return super(Bundle, self).save(*args, **kwargs) - - def deserialize(self, prefer_evolution=False): - """ - Deserialize the contents of this bundle. - - The actual implementation is _do_serialize() this function - catches any exceptions it might throw and converts them to - BundleDeserializationError instance. Any previous import errors are - overwritten. - - Successful import also discards any previous import errors and - sets is_deserialized to True. - """ - if self.is_deserialized: - return - try: - self._do_deserialize(prefer_evolution) - except Exception as ex: - import_error = BundleDeserializationError.objects.get_or_create( - bundle=self)[0] - import_error.error_message = str(ex) - import_error.traceback = traceback.format_exc() - import_error.save() - else: - try: - self.deserialization_error.delete() - except BundleDeserializationError.DoesNotExist: - pass - self.is_deserialized = True - self.save() - bundle_was_deserialized.send_robust(sender=self, bundle=self) - - def _do_deserialize(self, prefer_evolution): - """ - Deserialize this bundle or raise an exception - """ - helper = BundleDeserializer() - helper.deserialize(self, prefer_evolution) - - def get_summary_results(self): - if self.is_deserialized: - stats = TestResult.objects.filter( - test_run__bundle = self).values( - 'result').annotate( - count=models.Count('result')) - result = dict([ - (TestResult.RESULT_MAP[item['result']], item['count']) - for item in stats]) - result['total'] = sum(result.values()) - return result - - def delete_files(self, save=False): - """ - Delete all files related to this bundle. - - This is currently used in test code to clean up after testing. - """ - self.content.delete(save=save) - for test_run in self.test_runs.all(): - for attachment in test_run.attachments.all(): - attachment.content.delete(save=save) - - def get_sanitized_bundle(self): - self.content.open() - try: - return SanitizedBundle(self.content) - finally: - self.content.close() - - def get_document_format(self): - try: - self.content.open('rb') - except IOError: - return "unknown" - else: - try: - fmt, doc = DocumentIO.load(self.content) - return fmt - finally: - self.content.close() - - def get_serialization_format(self): - return "JSON" - - def get_content_size(self): - try: - return filesizeformat(self.content.size) - except OSError: - return "unknown" - - -class SanitizedBundle(object): - - def __init__(self, stream): - try: - self.bundle_json = simplejson.load(stream) - self.deserialization_error = None - except simplejson.JSONDeserializationError as ex: - self.bundle_json = None - self.deserialization_error = ex - self.did_remove_attachments = False - self._sanitize() - - def get_human_readable_json(self): - return simplejson.dumps(self.bundle_json, indent=4) - - def _sanitize(self): - for test_run in self.bundle_json.get("test_runs", []): - attachments = test_run.get("attachments") - if isinstance(attachments, list): - for attachment in attachments: - attachment["content"] = None - self.did_remove_attachments = True - elif isinstance(attachments, dict): - for name in attachments: - attachments[name] = None - self.did_remove_attachments = True - - -class BundleDeserializationError(models.Model): - """ - Model for representing errors encountered during bundle - deserialization. There is one instance per bundle limit due to - unique = True. There used to be a OneToOne field but it didn't work - with databrowse application. - - The relevant logic for managing this is in the Bundle.deserialize() - """ - - bundle = models.OneToOneField( - Bundle, - primary_key = True, - unique = True, - related_name = 'deserialization_error' - ) - - error_message = models.CharField( - max_length = 1024 - ) - - traceback = models.TextField( - max_length = 1 << 15, - ) - - def __unicode__(self): - return self.error_message - - -class Test(models.Model): - """ - Model for representing tests. - - Test is a collection of individual test cases. - """ - test_id = models.CharField( - max_length = 1024, - verbose_name = _("Test ID"), - unique = True) - - name = models.CharField( - blank = True, - max_length = 1024, - verbose_name = _(u"Name")) - - def __unicode__(self): - return self.name or self.test_id - - @models.permalink - def get_absolute_url(self): - return ('dashboard_app.views.test_detail', [self.test_id]) - - def count_results_without_test_case(self): - return TestResult.objects.filter( - test_run__test=self, - test_case=None).count() - - def count_failures_without_test_case(self): - return TestResult.objects.filter( - test_run__test=self, - test_case=None, - result=TestResult.RESULT_FAIL).count() - - -class TestCase(models.Model): - """ - Model for representing test cases. - - Test case is a unique component of a specific test. - Test cases allow for relating to test results. - """ - test = models.ForeignKey( - Test, - related_name='test_cases') - - test_case_id = models.TextField( - verbose_name = _("Test case ID")) - - name = models.TextField( - blank = True, - help_text = _help_max_length(100), - verbose_name = _("Name")) - - units = models.TextField( - blank = True, - help_text = (_("""Units in which measurement value should be - interpreted in, for example ms, MB/s etc. - There is no semantical meaning inferred from the value of - this field, free form text is allowed.
""") - + _help_max_length(100)), - verbose_name = _("Units")) - - class Meta: - unique_together = (('test', 'test_case_id')) - - def __unicode__(self): - return self.name or self.test_case_id - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.test_case.details", [self.test.test_id, self.test_case_id]) - - def count_failures(self): - return self.test_results.filter(result=TestResult.RESULT_FAIL).count() - - -class TestDefinition(models.Model): - """ - Model for representing test definitions. - - Test Definition are in YAML format. - """ - LOCATION_CHOICES = ( - ('LOCAL', 'Local'), - ('URL', 'URL'), - ('GIT', 'GIT Repo'), - ('BZR', 'BZR Repo'), - ) - - name = models.CharField( - max_length = 512, - verbose_name = _("Name"), - unique = True, - help_text = _help_max_length(512)) - - version = models.CharField( - max_length=256, - verbose_name = _("Version"), - help_text = _help_max_length(256)) - - description = models.TextField( - verbose_name = _("Description")) - - format = models.CharField( - max_length = 128, - verbose_name = _("Format"), - help_text = _help_max_length(128)) - - location = models.CharField( - max_length = 64, - verbose_name = _("Location"), - choices = LOCATION_CHOICES, - default = 'LOCAL') - - url = models.CharField( - verbose_name = _(u"URL"), - max_length = 1024, - blank = False, - help_text = _help_max_length(1024)) - - environment = models.CharField( - max_length = 256, - verbose_name = _("Environment"), - help_text = _help_max_length(256)) - - target_os = models.CharField( - max_length = 512, - verbose_name = _("Operating Systems"), - help_text = _help_max_length(512)) - - target_dev_types = models.CharField( - max_length = 512, - verbose_name = _("Device types"), - help_text = _help_max_length(512)) - - content = models.FileField( - verbose_name = _(u"Upload Test Definition"), - help_text = _(u"Test definition file"), - upload_to = 'testdef', - blank = True, - null = True) - - mime_type = models.CharField( - verbose_name = _(u"MIME type"), - default = 'text/plain', - max_length = 64, - help_text = _help_max_length(64)) - - def __unicode__(self): - return self.name - - -class SoftwareSource(models.Model): - """ - Model for representing source reference of a particular project - """ - - project_name = models.CharField( - max_length = 32, - help_text = _help_max_length(32), - verbose_name = _(u"Project Name"), - ) - branch_url = models.CharField( - max_length = 256, - help_text = _help_max_length(256), - verbose_name = _(u"Branch URL"), - ) - branch_vcs = models.CharField( - max_length = 10, - help_text = _help_max_length(10), - verbose_name = _(u"Branch VCS"), - ) - branch_revision = models.CharField( - max_length = 128, - help_text = _help_max_length(128), - verbose_name = _(u"Branch Revision") - ) - commit_timestamp = models.DateTimeField( - blank=True, - null=True, - help_text = _(u"Date and time of the commit (optional)"), - verbose_name = _(u"Commit Timestamp") - ) - - def __unicode__(self): - return _(u"{project_name} from branch {branch_url} at revision {branch_revision}").format( - project_name=self.project_name, branch_url=self.branch_url, branch_revision=self.branch_revision) - - @property - def is_hosted_on_launchpad(self): - return self.branch_url.startswith("lp:") - - @property - def is_tag_revision(self): - return self.branch_revision.startswith("tag:") - - @property - def branch_tag(self): - if self.is_tag_revision: - return self.branch_revision[len("tag:"):] - - @property - def link_to_project(self): - return "http://launchpad.net/{project_name}".format(project_name=self.project_name) - - @property - def link_to_branch(self): - if self.is_hosted_on_launchpad: - return "http://launchpad.net/{branch_url}/".format(branch_url=self.branch_url[len("lp:"):]) - -class TestRun(models.Model): - """ - Model for representing test runs. - - Test run is an act of running a Test in a certain context. The - context is described by the software and hardware environment. In - addition to those properties each test run can have arbitrary named - properties for additional context that is not reflected in the - database directly. - - Test runs have global identity exists beyond the lifetime of - bundle that essentially encapsulates test run information should - store the UUID that was generated at the time the document is made. - the dashboard application. The software that prepares the dashboard - """ - - # Meta-data - - bundle = models.ForeignKey( - Bundle, - related_name = 'test_runs', - ) - - test = models.ForeignKey( - Test, - related_name = 'test_runs', - ) - - analyzer_assigned_uuid = models.CharField( - help_text = _(u"You can use uuid.uuid1() to generate a value"), - max_length = 36, - unique = True, - verbose_name = _(u"Analyzer assigned UUID"), - ) - - analyzer_assigned_date = models.DateTimeField( - verbose_name = _(u"Analyzer assigned date"), - help_text = _(u"Time stamp when the log was processed by the log" - " analyzer"), - ) - - import_assigned_date = models.DateTimeField( - verbose_name = _(u"Import assigned date"), - help_text = _(u"Time stamp when the bundle was imported"), - auto_now_add = True, - ) - - time_check_performed = models.BooleanField( - verbose_name = _(u"Time check performed"), - help_text = _(u"Indicator on wether timestamps in the log file (and any " - "data derived from them) should be trusted.
" - "Many pre-production or development devices do not " - "have a battery-powered RTC and it's not common for " - "development images not to synchronize time with " - "internet time servers.
" - "This field allows us to track tests results that " - "certainly have correct time if we ever end up " - "with lots of tests results from 1972") - ) - - microseconds = models.BigIntegerField( - blank = True, - null = True - ) - - # Software Context - - sw_image_desc = models.CharField( - blank = True, - max_length = 100, - verbose_name = _(u"Operating System Image"), - ) - - packages = models.ManyToManyField( - SoftwarePackage, - blank = True, - related_name = 'test_runs', - verbose_name = _(u"Software packages"), - ) - - sources = models.ManyToManyField( - SoftwareSource, - blank = True, - related_name = 'test_runs', - verbose_name = _(u"Software sources"), - ) - - # Hardware Context - - devices = models.ManyToManyField( - HardwareDevice, - blank = True, - related_name = 'test_runs', - verbose_name = _(u"Hardware devices"), - ) - - # Attributes - - attributes = generic.GenericRelation(NamedAttribute) - - # Tags - - tags = models.ManyToManyField( - "Tag", - blank=True, - related_name='test_runs', - verbose_name=_(u"Tags")) - - # Attachments - - attachments = generic.GenericRelation('Attachment') - - def __unicode__(self): - return _(u"Test run {0}").format(self.analyzer_assigned_uuid) - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.views.test_run_detail", - [self.bundle.bundle_stream.pathname, - self.bundle.content_sha1, - self.analyzer_assigned_uuid]) - - def get_permalink(self): - return reverse("dashboard_app.views.redirect_to_test_run", args=[self.analyzer_assigned_uuid]) - - def get_board(self): - """ - Return an associated Board device, if any. - """ - try: - return self.devices.filter(device_type="device.board").get() - except HardwareDevice.DoesNotExist: - pass - except HardwareDevice.MultipleObjectsReturned: - pass - - def get_results(self): - """ - Get all results efficiently - """ - return self.test_results.select_related( - "test_case", # explicit join on test_case which might be NULL - "test_run", # explicit join on test run, needed by all the get_absolute_url() methods - "test_run__bundle", # explicit join on bundle - "test_run__bundle__bundle_stream", # explicit join on bundle stream - ).order_by("relative_index") # sort as they showed up in the bundle - - def denormalize(self): - try: - self.denormalization - except TestRunDenormalization.DoesNotExist: - TestRunDenormalization.objects.create_from_test_run(self) - - def _get_summary_results(self, factor=3): - stats = self.test_results.values('result').annotate( - count=models.Count('result')).order_by() - result = dict([ - (TestResult.RESULT_MAP[item['result']], item['count']) - for item in stats]) - result['total'] = sum(result.values()) - result['total_multiplied'] = result['total'] * factor - return result - - def get_summary_results(self): - if not hasattr(self, '_cached_summary_results'): - self._cached_summary_results = self._get_summary_results() - return self._cached_summary_results - - # test_duration property - - def _get_test_duration(self): - if self.microseconds is None: - return None - else: - return datetime.timedelta(microseconds = self.microseconds) - - def _set_test_duration(self, duration): - if duration is None: - self.microseconds = None - else: - if not isinstance(duration, datetime.timedelta): - raise TypeError("duration must be a datetime.timedelta() instance") - self.microseconds = ( - duration.microseconds + - (duration.seconds * 10 ** 6) + - (duration.days * 24 * 60 * 60 * 10 ** 6)) - - test_duration = property(_get_test_duration, _set_test_duration) - - class Meta: - ordering = ['-import_assigned_date'] - - def show_device(self): - all_attributes = self.attributes.all() - for one_attributes in all_attributes: - if one_attributes.name == "target": - return one_attributes.value - - for one_attributes in all_attributes: - if one_attributes.name == "target.hostname": - return one_attributes.value - - for one_attributes in all_attributes: - if one_attributes.name == "target.device_type": - return one_attributes.value - return "Target Device" - - -class TestRunDenormalization(models.Model): - """ - Denormalized model for test run - """ - - test_run = models.OneToOneField( - TestRun, - primary_key=True, - related_name="denormalization") - - count_pass = models.PositiveIntegerField( - null=False, - blank=False) - - count_fail = models.PositiveIntegerField( - null=False, - blank=False) - - count_skip = models.PositiveIntegerField( - null=False, - blank=False) - - count_unknown = models.PositiveIntegerField( - null=False, - blank=False) - - def count_all(self): - return (self.count_pass + self.count_fail + self.count_skip + - self.count_unknown) - - objects = TestRunDenormalizationManager() - - -class Attachment(models.Model): - """ - Model for adding attachments to any other models. - """ - - content = models.FileField( - verbose_name = _(u"Content"), - help_text = _(u"Attachment content"), - upload_to = 'attachments', - null = True) - - content_filename = models.CharField( - verbose_name = _(u"Content file name"), - help_text = _(u"Name of the original attachment"), - max_length = 256) - - mime_type = models.CharField( - verbose_name = _(u"MIME type"), - max_length = 64) - - public_url = models.URLField( - verbose_name = _(u"Public URL"), - max_length = 512, - blank = True) - - # Content type plumbing - content_type = models.ForeignKey(ContentType) - object_id = models.PositiveIntegerField() - content_object = generic.GenericForeignKey('content_type', 'object_id') - - def __unicode__(self): - return self.content_filename - - def is_test_run_attachment(self): - if (self.content_type.app_label == 'dashboard_app' and - self.content_type.model == 'testrun'): - return True - - def is_test_result_attachment(self): - if (self.content_type.app_label == 'dashboard_app' and - self.content_type.model == 'testresult'): - return True - - @property - def test_run(self): - if self.is_test_run_attachment(): - return self.content_object - - @property - def test_result(self): - if self.is_test_result_attachment(): - return self.content_object - - @property - def bundle(self): - if self.is_test_result_attachment(): - run = self.test_result.test_run - elif self.is_test_run_attachment(): - run = self.test_run - return run.bundle - - def get_content_size(self): - try: - return filesizeformat(self.content.size) - except OSError: - return "unknown size" - - @models.permalink - def get_download_url(self): - return ("dashboard_app.views.attachment_download", - [self.pk]) - - @models.permalink - def get_view_url(self): - return ("dashboard_app.views.attachment_view", - [self.pk]) - - def is_viewable(self): - return self.mime_type in ['text/plain'] - - -class TestResult(models.Model): - """ - Model for representing test results. - """ - - RESULT_PASS = 0 - RESULT_FAIL = 1 - RESULT_SKIP = 2 - RESULT_UNKNOWN = 3 - - RESULT_MAP = { - RESULT_PASS: 'pass', - RESULT_FAIL: 'fail', - RESULT_SKIP: 'skip', - RESULT_UNKNOWN: 'unknown' - } - - # Context information - - test_run = models.ForeignKey( - TestRun, - related_name = "test_results" - ) - - test_case = models.ForeignKey( - TestCase, - related_name = "test_results", - null = True, - blank = True - ) - - @property - def test(self): - return self.test_run.test - - # Core attributes - - result = models.PositiveSmallIntegerField( - verbose_name = _(u"Result"), - help_text = _(u"Result classification to pass/fail group"), - choices = ( - (RESULT_PASS, _(u"Test passed")), - (RESULT_FAIL, _(u"Test failed")), - (RESULT_SKIP, _(u"Test skipped")), - (RESULT_UNKNOWN, _(u"Unknown outcome"))) - ) - - measurement = models.DecimalField( - blank = True, - decimal_places = 10, - help_text = _(u"Arbitrary value that was measured as a part of this test."), - max_digits = 20, - null = True, - verbose_name = _(u"Measurement"), - ) - - # Misc attributes - - filename = models.CharField( - blank = True, - max_length = 1024, - null = True, - ) - - lineno = models.PositiveIntegerField( - blank = True, - null = True - ) - - message = models.TextField( - blank = True, - max_length = 1024, - null = True - ) - - microseconds = models.BigIntegerField( - blank = True, - null = True - ) - - timestamp = models.DateTimeField( - blank = True, - null = True - ) - - relative_index = models.PositiveIntegerField( - help_text = _(u"The relative order of test results in one test run") - ) - - def __unicode__(self): - return "Result {0}/{1}".format(self.test_run.analyzer_assigned_uuid, self.relative_index) - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.views.test_result_detail", [ - self.test_run.bundle.bundle_stream.pathname, - self.test_run.bundle.content_sha1, - self.test_run.analyzer_assigned_uuid, - self.relative_index, - ]) - - def get_permalink(self): - return reverse("dashboard_app.views.redirect_to_test_result", - args=[self.test_run.analyzer_assigned_uuid, - self.relative_index]) - - @property - def result_code(self): - """ - Stable textual result code that does not depend on locale - """ - return self.RESULT_MAP[self.result] - - # units (via test case) - - @property - def units(self): - try: - return self.test_case.units - except TestCase.DoesNotExist: - return None - - # Attributes - - attributes = generic.GenericRelation(NamedAttribute) - - # Attachments - - attachments = generic.GenericRelation(Attachment) - - # Duration property - - def _get_duration(self): - if self.microseconds is None: - return None - else: - return datetime.timedelta(microseconds = self.microseconds) - - def _set_duration(self, duration): - if duration is None: - self.microseconds = None - else: - if not isinstance(duration, datetime.timedelta): - raise TypeError("duration must be a datetime.timedelta() instance") - self.microseconds = ( - duration.microseconds + - (duration.seconds * 10 ** 6) + - (duration.days * 24 * 60 * 60 * 10 ** 6)) - - duration = property(_get_duration, _set_duration) - - def related_attachment_available(self): - """ - Check if there is a log file attached to the test run that has - the same filename as log filename recorded in the result here. - """ - try: - self.related_attachment() - return True - except Attachment.DoesNotExist: - return False - - def related_attachment(self): - return self.test_run.attachments.get(content_filename=self.filename) - - class Meta: - ordering = ['relative_index'] - order_with_respect_to = 'test_run' - - -class DataView(RepositoryItem): - """ - Data view, a container for SQL query and optional arguments - """ - - repository = DataViewRepository() - - def __init__(self, name, backend_queries, arguments, documentation, summary): - self.name = name - self.backend_queries = backend_queries - self.arguments = arguments - self.documentation = documentation - self.summary = summary - - def __unicode__(self): - return self.name - - def __repr__(self): - return "" % (self.name,) - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.views.data_view_detail", [self.name]) - - def _get_connection_backend_name(self, connection): - backend = str(type(connection)) - if "sqlite" in backend: - return "sqlite" - elif "postgresql" in backend: - return "postgresql" - else: - return "" - - def get_backend_specific_query(self, connection): - """ - Return BackendSpecificQuery for the specified connection - """ - sql_backend_name = self._get_connection_backend_name(connection) - try: - return self.backend_queries[sql_backend_name] - except KeyError: - return self.backend_queries.get(None, None) - - def lookup_argument(self, name): - """ - Return Argument with the specified name - - Raises LookupError if the argument cannot be found - """ - for argument in self.arguments: - if argument.name == name: - return argument - raise LookupError(name) - - @classmethod - def get_connection(cls): - """ - Get the appropriate connection for data views - """ - from django.db import connection, connections - from django.db.utils import ConnectionDoesNotExist - try: - return connections['dataview'] - except ConnectionDoesNotExist: - logging.warning("dataview-specific database connection not available, dataview query is NOT sandboxed") - return connection # NOTE: it's connection not connectionS (the default connection) - - def __call__(self, connection, **arguments): - # Check if arguments have any bogus names - valid_arg_names = frozenset([argument.name for argument in self.arguments]) - for arg_name in arguments: - if arg_name not in valid_arg_names: - raise TypeError("Data view %s has no argument %r" % (self.name, arg_name)) - # Get the SQL template for our database connection - query = self.get_backend_specific_query(connection) - if query is None: - raise LookupError("Specified data view has no SQL implementation " - "for current database") - # Replace SQL aruments with django placeholders (connection agnostic) - template = query.sql_template - template = template.replace("%", "%%") - # template = template.replace("{", "{{").replace("}", "}}") - sql = template.format( - **dict([ - (arg_name, "%s") - for arg_name in query.argument_list])) - # Construct argument list using defaults for missing values - sql_args = [ - arguments.get(arg_name, self.lookup_argument(arg_name).default) - for arg_name in query.argument_list] - with contextlib.closing(connection.cursor()) as cursor: - # Execute the query with the specified arguments - cursor.execute(sql, sql_args) - # Get and return the results - rows = cursor.fetchall() - columns = cursor.description - return rows, columns - - -class DataReport(RepositoryItem): - """ - Data reports are small snippets of xml that define - a limited django template. - """ - - repository = DataReportRepository() - - def __init__(self, **kwargs): - self._html = None - self._data = kwargs - - def __unicode__(self): - return self.title - - def __repr__(self): - return "" % (self.name,) - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.views.report_detail", [self.name]) - - def _get_raw_html(self): - pathname = os.path.join(self.base_path, self.path) - try: - with open(pathname) as stream: - return stream.read() - except (IOError, OSError) as ex: - logging.error("Unable to load DataReport HTML file from %r: %s", pathname, ex) - return "" - - def _get_html_template(self): - return Template(self._get_raw_html()) - - def _get_html_template_context(self): - return Context({ - "API_URL": reverse("dashboard_app.views.dashboard_xml_rpc_handler"), - "STATIC_URL": settings.STATIC_URL - }) - - def get_html(self): - DEBUG = getattr(settings, "DEBUG", False) - if self._html is None or DEBUG is True: - template = self._get_html_template() - context = self._get_html_template_context() - self._html = template.render(context) - return self._html - - @property - def title(self): - return self._data['title'] - - @property - def path(self): - return self._data['path'] - - @property - def name(self): - return self._data['name'] - - @property - def bug_report_url(self): - return self._data.get('bug_report_url') - - @property - def author(self): - return self._data.get('author') - - @property - def front_page(self): - return self._data['front_page'] - - -class Tag(models.Model): - """ - Tag used for marking test runs. - """ - name = models.SlugField( - verbose_name=_(u"Tag"), - max_length=256, - db_index=True, - unique=True) - - def __unicode__(self): - return self.name - - -class Image(models.Model): - - name = models.SlugField(max_length=1024, unique=True) - - filter = models.ForeignKey("TestRunFilter", related_name='+', null=True) - - def __unicode__(self): - owner_name = getattr(self.filter, 'owner_name', '') - return '%s, based on %s' % (self.name, owner_name) - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.views.images.image_report_detail", (), dict(name=self.name)) - - -class ImageSet(models.Model): - - name = models.CharField(max_length=1024, unique=True) - - images = models.ManyToManyField(Image) - - def __unicode__(self): - return self.name - - -class LaunchpadBug(models.Model): - - bug_id = models.PositiveIntegerField(unique=True) - - test_runs = models.ManyToManyField(TestRun, related_name='launchpad_bugs') - - def __unicode__(self): - return unicode(self.bug_id) - -@receiver(post_delete) -def file_cleanup(sender, instance, **kwargs): - """ - Signal receiver used for remove FieldFile attachments when removing - objects (Bundle and Attachment) from the database. - """ - if instance is None or sender not in (Bundle, Attachment): - return - meta = sender._meta - - for field_name in meta.get_all_field_names(): - - # object that represents the metadata of the field - try: - field_meta = meta.get_field(field_name) - except FieldDoesNotExist: - continue - - # we just want the FileField's, not all the fields - if not isinstance(field_meta, models.FileField): - continue - - # the field itself is a FieldFile instance, proxied by FileField - field = getattr(instance, field_name) - - # the 'path' attribute contains the name of the file we need - if hasattr(field, 'path') and os.path.exists(field.path): - field.storage.delete(field.path) - - -class TestRunFilterAttribute(models.Model): - - name = models.CharField(max_length=1024) - value = models.CharField(max_length=1024) - - filter = models.ForeignKey("TestRunFilter", related_name="attributes") - - def __unicode__(self): - return '%s = %s' % (self.name, self.value) - - -class TestRunFilterTest(models.Model): - - test = models.ForeignKey(Test, related_name="+") - filter = models.ForeignKey("TestRunFilter", related_name="tests") - index = models.PositiveIntegerField( - help_text = _(u"The index of this test in the filter")) - - def __unicode__(self): - return unicode(self.test) - - -class TestRunFilterTestCase(models.Model): - - test_case = models.ForeignKey(TestCase, related_name="+") - test = models.ForeignKey(TestRunFilterTest, related_name="cases") - index = models.PositiveIntegerField( - help_text = _(u"The index of this case in the test")) - - def __unicode__(self): - return unicode(self.test_case) - - -class TestRunFilter(models.Model): - - owner = models.ForeignKey(User) - - name = models.SlugField( - max_length=1024, - help_text=("The name of a filter is used to refer to it in " - "the web UI and in email notifications triggered by this " - "filter.")) - - @property - def owner_name(self): - return '~%s/%s' % (self.owner.username, self.name) - - class Meta: - unique_together = (('owner', 'name')) - - bundle_streams = models.ManyToManyField(BundleStream) - bundle_streams.help_text = 'A filter only matches tests within the given bundle streams.' - - public = models.BooleanField( - default=False, help_text="Whether other users can see this filter.") - - build_number_attribute = models.CharField( - max_length=1024, blank=True, null=True, - help_text="For some filters, there is a natural build number. If you specify the name of the attribute that contains the build number here, the results of the filter will be grouped and ordered by this build number.") - - uploaded_by = models.ForeignKey( - User, null=True, blank=True, related_name='+', - help_text="Only consider bundles uploaded by this user") - - def as_data(self): - tests = [] - for trftest in self.tests.order_by('index').prefetch_related('cases'): - tests.append({ - 'test': trftest.test, - 'test_cases': [trftestcase.test_case for trftestcase in trftest.cases.all().select_related('test_case')], - }) - return { - 'bundle_streams': self.bundle_streams.all(), - 'attributes': self.attributes.all().values_list('name', 'value'), - 'tests': tests, - 'build_number_attribute': self.build_number_attribute, - 'uploaded_by': self.uploaded_by, - } - - def __unicode__(self): - return "" % (self.owner.username, self.name) - - # given bundle: - # select from filter - # where bundle.bundle_stream in filter.bundle_streams - # and filter.test in (select test from bundle.test_runs) - # and all the attributes on the filter are on a testrun in the bundle - # = the minimum over testrun (the number of attributes on the filter that are not on the testrun) is 0 - # and (filter.test_case is null - # or filter.test_case in select test_case from bundle.test_runs.test_results.test_cases) - - @classmethod - def matches_against_bundle(self, bundle): - from dashboard_app.filters import FilterMatch - bundle_filters = bundle.bundle_stream.testrunfilter_set.all() - attribute_filters = bundle_filters.extra( - where=[ - """(select min((select count(*) - from dashboard_app_testrunfilterattribute - where filter_id = dashboard_app_testrunfilter.id - and (name, value) not in (select name, value - from dashboard_app_namedattribute - where content_type_id = ( - select django_content_type.id from django_content_type - where app_label = 'dashboard_app' and model='testrun') - and object_id = dashboard_app_testrun.id))) - from dashboard_app_testrun where dashboard_app_testrun.bundle_id = %s) = 0""" % bundle.id], - ) - no_test_filters = list(attribute_filters.annotate(models.Count('tests')).filter(tests__count=0)) - attribute_filters = list(attribute_filters) - no_test_case_filters = list( - TestRunFilter.objects.filter( - id__in=TestRunFilterTest.objects.filter( - filter__in=attribute_filters, test__in=bundle.test_runs.all().values('test_id')).annotate( - models.Count('cases')).filter(cases__count=0).values('filter__id'), - )) - tcf = TestRunFilter.objects.filter( - id__in=TestRunFilterTest.objects.filter( - filter__in=attribute_filters, - cases__test_case__id__in=bundle.test_runs.all().values('test_results__test_case__id') - ).values('filter__id') - ) - test_case_filters = list(tcf) - - filters = set(test_case_filters + no_test_case_filters + no_test_filters) - matches = [] - bundle_with_counts = Bundle.objects.annotate( - pass_count=models.Sum('test_runs__denormalization__count_pass'), - unknown_count=models.Sum('test_runs__denormalization__count_unknown'), - skip_count=models.Sum('test_runs__denormalization__count_skip'), - fail_count=models.Sum('test_runs__denormalization__count_fail')).get( - id=bundle.id) - for filter in filters: - match = FilterMatch() - match.filter = filter - match.filter_data = filter.as_data() - match.test_runs = list(bundle.test_runs.all()) - match.specific_results = list( - TestResult.objects.filter( - test_case__id__in=filter.tests.all().values('cases__test_case__id'), - test_run__bundle=bundle)) - b = bundle_with_counts - match.result_count = b.unknown_count + b.skip_count + b.pass_count + b.fail_count - match.pass_count = bundle_with_counts.pass_count - matches.append(match) - return matches - - @models.permalink - def get_absolute_url(self): - return ( - "dashboard_app.views.filters.views.filter_detail", - [self.owner.username, self.name]) - - -class TestRunFilterSubscription(models.Model): - - user = models.ForeignKey(User) - - filter = models.ForeignKey(TestRunFilter) - - class Meta: - unique_together = (('user', 'filter')) - - NOTIFICATION_FAILURE, NOTIFICATION_ALWAYS = range(2) - - NOTIFICATION_CHOICES = ( - (NOTIFICATION_FAILURE, "Only when failed"), - (NOTIFICATION_ALWAYS, "Always")) - - level = models.IntegerField( - default=NOTIFICATION_FAILURE, choices=NOTIFICATION_CHOICES, - help_text=("You can choose to be notified by email:
  • whenever a test " - "that matches the criteria of this filter is executed" - "
  • only when a test that matches the criteria of this filter fails
")) - - @classmethod - def recipients_for_bundle(cls, bundle): - matches = TestRunFilter.matches_against_bundle(bundle) - matches_by_filter_id = {} - for match in matches: - matches_by_filter_id[match.filter.id] = match - args = [models.Q(filter_id__in=list(matches_by_filter_id))] - bs = bundle.bundle_stream - if not bs.is_public: - if bs.group: - args.append(models.Q(user__in=bs.group.user_set.all())) - else: - args.append(models.Q(user=bs.user)) - subscriptions = TestRunFilterSubscription.objects.filter(*args) - recipients = {} - for sub in subscriptions: - match = matches_by_filter_id[sub.filter.id] - if sub.level == cls.NOTIFICATION_FAILURE: - failure_found = False - if not match.filter_data['tests']: - failure_found = match.pass_count != match.result_count - else: - for t in match.filter_data['tests']: - if not t['test_cases']: - for tr in match.test_runs: - if tr.test == t.test: - if tr.denormalization.count_pass != tr.denormalization.count_all(): - failure_found = True - break - if failure_found: - break - if not failure_found: - for r in match.specific_results: - if r.result != TestResult.RESULT_PASS: - failure_found = True - break - if not failure_found: - continue - recipients.setdefault(sub.user, []).append(match) - return recipients - - -def send_bundle_notifications(sender, bundle, **kwargs): - try: - recipients = TestRunFilterSubscription.recipients_for_bundle(bundle) - domain = '???' - try: - site = Site.objects.get_current() - except (Site.DoesNotExist, ImproperlyConfigured): - pass - else: - domain = site.domain - url_prefix = 'http://%s' % domain - for user, matches in recipients.items(): - logging.info("sending bundle notification to %s", user) - data = {'bundle': bundle, 'user': user, 'matches': matches, 'url_prefix': url_prefix} - mail = render_to_string( - 'dashboard_app/filter_subscription_mail.txt', - data) - filter_names = ', '.join(match.filter.name for match in matches) - send_mail( - "LAVA result notification: " + filter_names, mail, - settings.SERVER_EMAIL, [user.email]) - except: - logging.exception("send_bundle_notifications failed") - raise - - -bundle_was_deserialized.connect(send_bundle_notifications) - - -class PMQABundleStream(models.Model): - - bundle_stream = models.ForeignKey(BundleStream, related_name='+') - - -class ImageReport(models.Model): - - name = models.SlugField(max_length=1024, unique=True) - - description = models.TextField(blank=True, null=True) - - is_published = models.BooleanField( - default=False, - verbose_name='Published') - - def __unicode__(self): - return self.name - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.views.image_reports.views.image_report_detail", - (), dict(name=self.name)) - -# Chart types -CHART_TYPES = ((r'pass/fail', 'Pass/Fail'), - (r'measurement', 'Measurement')) -# Chart representation -REPRESENTATION_TYPES = ((r'lines', 'Lines'), - (r'bars', 'Bars')) - - -class ImageReportChart(models.Model): - - name = models.CharField(max_length=100) - - description = models.TextField(blank=True, null=True) - - image_report = models.ForeignKey( - ImageReport, - default=None, - null=False, - on_delete=models.CASCADE) - - chart_type = models.CharField( - max_length=20, - choices=CHART_TYPES, - verbose_name='Chart type', - blank=False, - default="pass/fail", - ) - - target_goal = models.DecimalField( - blank = True, - decimal_places = 5, - max_digits = 10, - null = True, - verbose_name = 'Target goal') - - is_interactive = models.BooleanField( - default=False, - verbose_name='Chart is interactive') - - is_data_table_visible = models.BooleanField( - default=False, - verbose_name='Data table is visible') - - def __unicode__(self): - return self.name - - @models.permalink - def get_absolute_url(self): - return ("dashboard_app.views.image_reports.views.image_chart_detail", - (), dict(id=self.id)) - - -class ImageChartFilter(models.Model): - - image_chart = models.ForeignKey( - ImageReportChart, - null=False, - on_delete=models.CASCADE) - - filter = models.ForeignKey( - TestRunFilter, - null=True, - on_delete=models.SET_NULL) - - representation = models.CharField( - max_length=20, - choices=REPRESENTATION_TYPES, - verbose_name='Representation', - blank=False, - default="lines", - ) - - @models.permalink - def get_absolute_url(self): - return ( - "dashboard_app.views.image_reports.views.image_chart_filter_edit", - (), dict(id=self.id)) - - -class ImageChartTest(models.Model): - - class Meta: - unique_together = ("image_chart_filter", "test") - - image_chart_filter = models.ForeignKey( - ImageChartFilter, - null=False, - on_delete=models.CASCADE) - - test = models.ForeignKey( - Test, - null=False, - on_delete=models.CASCADE) - - name = models.CharField(max_length=200) - - -class ImageChartTestCase(models.Model): - - class Meta: - unique_together = ("image_chart_filter", "test_case") - - image_chart_filter = models.ForeignKey( - ImageChartFilter, - null=False, - on_delete=models.CASCADE) - - test_case = models.ForeignKey( - TestCase, - null=False, - on_delete=models.CASCADE) - - name = models.CharField(max_length=200) - === removed file 'dashboard_app/patches.py' --- dashboard_app/patches.py 2011-07-09 15:08:42 +0000 +++ dashboard_app/patches.py 1970-01-01 00:00:00 +0000 @@ -1,112 +0,0 @@ -""" -Patches for django bugs that affect this package -""" - -class PatchDjangoTicket1476(object): - """ - Patch for bug http://code.djangoproject.com/ticket/1476 - """ - - @classmethod - def apply_if_needed(patch): - import django - if django.VERSION[0:3] <= (1, 2, 4): - patch.apply() - - @classmethod - def apply(patch): - from django.utils.decorators import method_decorator - from django.views.decorators.csrf import csrf_protect - - @method_decorator(csrf_protect) - def __call__(self, request, *args, **kwargs): - """ - Main method that does all the hard work, conforming to the Django view - interface. - """ - if 'extra_context' in kwargs: - self.extra_context.update(kwargs['extra_context']) - current_step = self.determine_step(request, *args, **kwargs) - self.parse_params(request, *args, **kwargs) - - # Sanity check. - if current_step >= self.num_steps(): - raise Http404('Step %s does not exist' % current_step) - - # Process the current step. If it's valid, go to the next step or call - # done(), depending on whether any steps remain. - if request.method == 'POST': - form = self.get_form(current_step, request.POST) - else: - form = self.get_form(current_step) - - if form.is_valid(): - # Validate all the forms. If any of them fail validation, that - # must mean the validator relied on some other input, such as - # an external Web site. - - # It is also possible that validation might fail under certain - # attack situations: an attacker might be able to bypass previous - # stages, and generate correct security hashes for all the - # skipped stages by virtue of: - # 1) having filled out an identical form which doesn't have the - # validation (and does something different at the end), - # 2) or having filled out a previous version of the same form - # which had some validation missing, - # 3) or previously having filled out the form when they had - # more privileges than they do now. - # - # Since the hashes only take into account values, and not other - # other validation the form might do, we must re-do validation - # now for security reasons. - previous_form_list = [self.get_form(i, request.POST) for i in range(current_step)] - - for i, f in enumerate(previous_form_list): - if request.POST.get("hash_%d" % i, '') != self.security_hash(request, f): - return self.render_hash_failure(request, i) - - if not f.is_valid(): - return self.render_revalidation_failure(request, i, f) - else: - self.process_step(request, f, i) - - # Now progress to processing this step: - self.process_step(request, form, current_step) - next_step = current_step + 1 - - - if next_step == self.num_steps(): - return self.done(request, previous_form_list + [form]) - else: - form = self.get_form(next_step) - self.step = current_step = next_step - - return self.render(form, request, current_step) - - from django.contrib.formtools.wizard import FormWizard - FormWizard.__call__ = __call__ - - -class PatchDjangoTicket15155(object): - """ - Patch for bug http://code.djangoproject.com/ticket/15155 - """ - - PROPER_FORMAT = r'(? -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - - -from __future__ import with_statement - -import abc -import logging -import os -import thread - -from django.conf import settings - - -class RepositoryItemMeta(abc.ABCMeta): - """ - Meta class for RepositoryItem - - Adds magic to set repository._item_cls to the non-meta - class object that use this meta-class. - """ - - def __new__(mcls, name, bases, namespace): - cls = super(RepositoryItemMeta, mcls).__new__( - mcls, name, bases, namespace) - if "repository" in namespace: - repo = cls.repository - repo.item_cls = cls - return cls - - -class RepositoryItem(object): - """ - Repository Item, element of a Repository. - - Each repository item is loaded from a XML file. - """ - - __metaclass__ = RepositoryItemMeta - - _base_path = None - - def _load_from_external_representation(self, pathname): - self._base_path = os.path.dirname(pathname) - - @property - def base_path(self): - return self._base_path - - class DoesNotExist(Exception): - pass - - class MultipleValuesReturned(Exception): - pass - - -class RepositoryQuerySet(object): - """ - QuerySet-like class for poking at RepositoryItems - """ - - def __iter__(self): - return iter(self._items) - - def __len__(self): - return len(self._items) - - def __nonzero__(self): - return len(self._items) != 0 - - def __getitem__(self, slice_or_index): - return self._items.__getitem__(slice_or_index) - -# Django QuerySet like API: - - def count(self): - return len(self) - - def all(self): - return self - - def get(self, **kwargs): - query = self.filter(**kwargs) - if len(query) == 1: - return query[0] - if not query: - raise self.model.DoesNotExist() - else: - raise self.model.MultipleValuesReturned() - - def filter(self, **kwargs): - return self._sub_query([ - item for item in self._items - if all( - (getattr(item, attr) == value) - for attr, value in kwargs.iteritems())]) - -# Internal API - - def __init__(self, model, items): - self.model = model - self._items = items - - def _sub_query(self, items): - return self.__class__(self.model, items) - - -class Repository(object): - """ - Repository - - A container of XML documents loaded from disk that behave somewhat like - django-built in database ORM - """ - - __metaclass__ = abc.ABCMeta - - loader_lock = thread.allocate_lock() - - def __init__(self): - self.item_cls = None # later patched by RepositoryItemMeta - self._items = [] - self._did_load = False - - def _queryset(self): - # HOT FIX: use a lock while loading the stuff from disk - with self.loader_lock: - # In development mode always reload repository items - if getattr(settings, "DEBUG", False) is True: - self._did_load = False - if not self._did_load: - self._items = [] - self._load_default() - self._did_load = True - return RepositoryQuerySet(self.item_cls, self._items) - - def all(self): - return self._queryset().all() - - def filter(self, **kwargs): - return self._queryset().filter(**kwargs) - - def get(self, **kwargs): - return self._queryset().get(**kwargs) - - def load_from_directory(self, directory): - try: - items = os.listdir(directory) - except (OSError, IOError) as exc: - logging.exception("Unable to enumreate directory: %s: %s", - directory, exc) - else: - for name in items: - pathname = os.path.join(directory, name) - if os.path.isfile(pathname) and pathname.endswith(".xml"): - self.load_from_file(pathname) - - @abc.abstractmethod - def load_from_xml_string(self, text): - """ - Load an IRepositoryItem from specified XML text - """ - - def load_from_file(self, pathname): - try: - with open(pathname, "rt") as stream: - text = stream.read() - item = self.load_from_xml_string(text) - # Let the item know where it came from - item._load_from_external_representation(pathname) - self._items.append(item) - except Exception as exc: - logging.exception("Unable to load object into repository %s: %s", - pathname, exc) - - @abc.abstractproperty - def settings_variable(self): - """ - VARIABLE to look for in django settings. It should - contain a list of directories to look for .xml - files. - """ - - def _load_default(self): - from django.conf import settings - for dirname in getattr(settings, self.settings_variable, []): - self.load_from_directory(dirname) - - -class Undefined(object): - """ - Undefined object, as in JavaScript. - - Similar to None but serves different purpose. While None is often "empty" - Undefined literally means "not set", this allows to use None as a normal - (non-special cased value). - """ - def __repr__(self): - return "undefined" - -# Undefined object singleton -Undefined = Undefined() - - -class Object(object): - """ - Object, as in JavaScript. - - The only noticeable difference from plain python object is that undefined - attributes do not raise AttributeError and instead produce Undefined - values. - """ - - def __getattr__(self, name): - return Undefined === removed file 'dashboard_app/repositories/common.py' --- dashboard_app/repositories/common.py 2011-07-22 00:05:03 +0000 +++ dashboard_app/repositories/common.py 1970-01-01 00:00:00 +0000 @@ -1,47 +0,0 @@ -# Copyright (C) 2011 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - - -from xml.sax.handler import ContentHandler -import re - - -class BaseContentHandler(ContentHandler): - - def _end_text(self): - """ - Stop collecting text and produce a stripped string with de-duplicated - whitespace - """ - full_text = re.sub("\s+", " ", u''.join(self._text)).strip() - self.text = None - return full_text - - def _start_text(self): - """ - Start collecting text - """ - self._text = [] - - def characters(self, content): - if isinstance(self._text, list): - self._text.append(content) - - def startDocument(self): - # Text can be None or a [] that accumulates all detected text - self._text = None === removed file 'dashboard_app/repositories/data_report.py' --- dashboard_app/repositories/data_report.py 2011-10-13 11:55:44 +0000 +++ dashboard_app/repositories/data_report.py 1970-01-01 00:00:00 +0000 @@ -1,79 +0,0 @@ -# Copyright (C) 2011 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - - -from xml.sax import parseString - -from dashboard_app.repositories import Repository, Undefined, Object -from dashboard_app.repositories.common import BaseContentHandler - - -class _DataReportHandler(BaseContentHandler): - """ - ContentHandler subclass for parsing DataReport documents - """ - - def startDocument(self): - # Classic-classes - BaseContentHandler.startDocument(self) - # Data report object - self.obj = Object() - - def endDocument(self): - if self.obj.name is Undefined: - raise ValueError("No data view definition found") - if self.obj.title is Undefined: - raise ValueError("Data report without a title") - if self.obj.path is Undefined: - raise ValueError("Data report without a path") - - def startElement(self, name, attrs): - if name == "data-report": - if "name" not in attrs: - raise ValueError("Data report without a name") - self.obj.name = attrs["name"] - self.obj.front_page = attrs.get('front_page') == "yes" - elif name == "title" or name == "path": - self._start_text() - - def endElement(self, name): - if name == "title": - self.obj.title = self._end_text() - elif name == "path": - self.obj.path = self._end_text() - - -class DataReportRepository(Repository): - - @property - def settings_variable(self): - return "DATAREPORT_DIRS" - - def load_from_xml_string(self, text): - handler = _DataReportHandler() - parseString(text, handler) - return self.item_cls( - name=handler.obj.name, - title=handler.obj.title, - path=handler.obj.path, - front_page=handler.obj.front_page) - - -__all__ = [ - "DataReportRepository", -] === removed file 'dashboard_app/repositories/data_view.py' --- dashboard_app/repositories/data_view.py 2011-07-22 00:11:36 +0000 +++ dashboard_app/repositories/data_view.py 1970-01-01 00:00:00 +0000 @@ -1,133 +0,0 @@ -# Copyright (C) 2011 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - -""" -DataViews: Encapsulated SQL query definitions. - -Implementation of the following launchpad blueprint: -https://blueprints.launchpad.net/launch-control/+spec/other-linaro-n-data-views-for-launch-control -""" - - -from xml.sax import parseString - -from dashboard_app.repositories import Repository, Undefined, Object -from dashboard_app.repositories.common import BaseContentHandler - - -class _DataViewHandler(BaseContentHandler): - - """ - ContentHandler subclass for parsing DataView documents - """ - - def startDocument(self): - # Classic-classes - BaseContentHandler.startDocument(self) - # Data view object - self.obj = Object() - # Set default values - self.obj.name = Undefined - self.obj.backend_queries = {} - self.obj.arguments = [] - self.obj.documentation = None - self.obj.summary = None - # Internal variables - self._current_backend_query = None - - def endDocument(self): - # TODO: check if we have anything defined - if self.obj.name is Undefined: - raise ValueError("No data view definition found") - - def startElement(self, name, attrs): - if name == "data-view": - self.obj.name = attrs["name"] - elif name == "summary" or name == "documentation": - self._start_text() - elif name == "sql": - self._start_text() - self._current_backend_query = BackendSpecificQuery( - attrs.get("backend"), None, []) - self.obj.backend_queries[ - self._current_backend_query.backend] = self._current_backend_query - elif name == "value": - if "name" not in attrs: - raise ValueError(" requires attribute 'name'") - self._text.append("{" + attrs["name"] + "}") - self._current_backend_query.argument_list.append(attrs["name"]) - elif name == "argument": - if "name" not in attrs: - raise ValueError(" requires attribute 'name'") - if "type" not in attrs: - raise ValueError(" requires attribute 'type'") - if attrs["type"] not in ("string", "number", "boolean", "timestamp"): - raise ValueError("invalid value for argument 'type' on ") - argument = Argument(name=attrs["name"], type=attrs["type"], - default=attrs.get("default", None), - help=attrs.get("help", None)) - self.obj.arguments.append(argument) - - def endElement(self, name): - if name == "sql": - self._current_backend_query.sql_template = self._end_text() - self._current_backend_query = None - elif name == "documentation": - self.obj.documentation = self._end_text() - elif name == "summary": - self.obj.summary = self._end_text() - - -class Argument(object): - """ - Data view argument for SQL prepared statements - """ - - def __init__(self, name, type, default, help): - self.name = name - self.type = type - self.default = default - self.help = help - - -class BackendSpecificQuery(object): - """ - Backend-specific query and argument list - """ - - def __init__(self, backend, sql_template, argument_list): - self.backend = backend - self.sql_template = sql_template - self.argument_list = argument_list - - -class DataViewRepository(Repository): - - @property - def settings_variable(self): - return "DATAVIEW_DIRS" - - def load_from_xml_string(self, text): - handler = _DataViewHandler() - parseString(text, handler) - return self.item_cls(**handler.obj.__dict__) - - -__all__ = [ - "DataViewRepository", -] === removed file 'dashboard_app/signals.py' --- dashboard_app/signals.py 2011-09-27 13:13:53 +0000 +++ dashboard_app/signals.py 1970-01-01 00:00:00 +0000 @@ -1,21 +0,0 @@ -# Copyright (C) 2010, 2011 Linaro Limited -# -# Author: Zygmunt Krynicki -# -# This file is part of Launch Control. -# -# Launch Control is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License version 3 -# as published by the Free Software Foundation -# -# Launch Control is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with Launch Control. If not, see . - -from django.dispatch import Signal - -bundle_was_deserialized = Signal(providing_args=['bundle']) === removed directory 'dashboard_app/static' === removed directory 'dashboard_app/static/dashboard_app' === removed directory 'dashboard_app/static/dashboard_app/css' === removed file 'dashboard_app/static/dashboard_app/css/dashboard.css' --- dashboard_app/static/dashboard_app/css/dashboard.css 2012-12-09 23:45:07 +0000 +++ dashboard_app/static/dashboard_app/css/dashboard.css 1970-01-01 00:00:00 +0000 @@ -1,21 +0,0 @@ -.lava-chart { - width: 600px; - height: 250px; - margin: 1em auto; - padding: 1em; -} - -ul.attachments { - padding-left: 10px; -} -ul.attachments li { - background: url("../images/file-icon.png") no-repeat; - list-style-type: none; - padding-left: 20px; -} - -#lava-sidebar ul.attributes li { - padding-left: 0; - background: none; - list-style-type: none; -} === removed file 'dashboard_app/static/dashboard_app/css/filter-detail.css' --- dashboard_app/static/dashboard_app/css/filter-detail.css 2013-01-10 20:37:00 +0000 +++ dashboard_app/static/dashboard_app/css/filter-detail.css 1970-01-01 00:00:00 +0000 @@ -1,52 +0,0 @@ -table.select-compare1 td { cursor: pointer; } -table.select-compare1 tr.even td { - background-color: #ccf; -} -table.select-compare1 tr.even.hover td { - background-color: #77f; -} -table.select-compare1 tr.odd td { - background-color: #aaf; -} -table.select-compare1 tr.odd.hover td { - background-color: #77f; -} - -table.select-compare2 td { cursor: pointer; } -table.select-compare2 tr.even td { - background-color: #fcc; -} -table.select-compare2 tr.odd td { - background-color: #faa; -} -table.select-compare2 tr.selected-1 td { - background-color: #77f; -} -table.select-compare2 tr.selected-1.hover td { - background-color: #77f; -} -table.select-compare2 tr.hover td { - background-color: #f77; -} -table.select-compare3 tr.selected-1 td { - background-color: #77f; -} -table.select-compare3 tr.selected-1.hover td { - background-color: #77f; -} -table.select-compare3 tr.selected-2 td { - background-color: #f77; -} -table.select-compare3 tr.selected-2.hover td { - background-color: #f77; -} -table.select-compare3 tr.selected-1 { - cursor: pointer; -} -table.select-compare3 tr.selected-2 { - cursor: pointer; -} -#filter-table input { - margin-top: 0; - margin-bottom: 0; -} \ No newline at end of file === removed file 'dashboard_app/static/dashboard_app/css/filter-edit.css' --- dashboard_app/static/dashboard_app/css/filter-edit.css 2012-09-13 03:16:48 +0000 +++ dashboard_app/static/dashboard_app/css/filter-edit.css 1970-01-01 00:00:00 +0000 @@ -1,20 +0,0 @@ -@import url("../../admin/css/widgets.css"); -div.selector span.helptext { display: none; } -div.selector h2 { margin: 0; font-size: 11pt; } -div.selector a { text-decoration: none; } -div.selector select { height: 10em; } -div.selector ul.selector-chooser { margin-top: 5.5em; } -div.selector .selector-chosen select { - border: 1px solid rgb(204, 204, 204); - border-top: none; -} -td.test-cell { - vertical-align: top; -} -table.test-case-formset { - border-collapse: collapse; -} -table.test-case-formset td { - padding-top: 0; - padding-bottom: 0; -} \ No newline at end of file === removed file 'dashboard_app/static/dashboard_app/css/image-charts.css' --- dashboard_app/static/dashboard_app/css/image-charts.css 2013-09-12 14:12:07 +0000 +++ dashboard_app/static/dashboard_app/css/image-charts.css 1970-01-01 00:00:00 +0000 @@ -1,82 +0,0 @@ -@import url("../../admin/css/widgets.css"); - -div.selector { clear: both; } -div.selector span.helptext { display: none; } -div.selector h2 { margin: 0; font-size: 11pt; } -div.selector a { text-decoration: none; } -div.selector select { height: 10em; } -div.selector ul.selector-chooser { margin-top: 5.5em; } -div.selector .selector-chosen select { - border: 1px solid rgb(204, 204, 204); - border-top: none; -} - -.list-container { - border: 1px solid #000000; - clear: both; - margin: 10px 10px 10px 10px; - padding: 10px; - width: 50%; -} - -.form-field { - margin-bottom: 5px; - vertical-align: top; -} - -.form-field label { - vertical-align: top; - width: 100px; - display: inline-block; - margin-left: 10px; -} - -.submit-button { - margin-top: 20px; - margin-left: 10px; -} - -.filter-headline { - font-weight: bold; - font-size: 16px; -} - -.filter-container { - margin-bottom: 10px; - clear: both; -} - -.filter-title { - font-weight: bold; - font-size: 15px; - margin-bottom: 10px; -} - -.chart-title { - font-weight: bold; - font-size: 15px; - margin-bottom: 10px; -} - -.errors { - color: red; -} - -.fields-container { - margin-left: 10px; -} - -#filters_div { - margin: 10px 0 0 10px; - border: 1px solid #000000; - clear: both; - width: 75%; - padding: 5px 0 10px 10px; - overflow: auto; -} - -#alias_container { - font-weight: bold; - float: left; - display: none; -} \ No newline at end of file === removed file 'dashboard_app/static/dashboard_app/css/image-report.css' --- dashboard_app/static/dashboard_app/css/image-report.css 2013-06-18 13:12:18 +0000 +++ dashboard_app/static/dashboard_app/css/image-report.css 1970-01-01 00:00:00 +0000 @@ -1,96 +0,0 @@ -#outer-table, .inner-table { - border-collapse: collapse; -} -#outer-table > tbody > tr > td { - padding: 0; - vertical-align: top; -} -#outer-table th { - text-align: left; -} -.inner-table td, .inner-table th { - min-width: 105px; - padding: 3px 4px; - border: thin solid black; -} -.inner-table td.present a { - color: #00a; - text-decoration: none; -} -.inner-table td.present a:hover { - text-decoration: underline; -} -.inner-table td.pass { - background-color: #4e4; -} -.inner-table td.fail { - background-color: #e44; -} -.inner-table td.missing { - background-color: #bbb; -} -#scroller { - width: 800px; - overflow-x: scroll; - overflow-y: visible; -} -#scroller td:first-child, #scroller th:first-child { - border-left: none; -} -.bug-links { - float: right; -} -#go-to-bug-dialog { - text-align: center; -} -#inner-container { - width: 80%; - height:250px; - margin:0 auto; - margin-left: 10px; - float: left; -} -#legend-container { - float: left; - margin-left: 20px; -} -#build_numbers_filter { - margin: 5px 0 0 20px; -} -#outer-container { - overflow: auto; -} -#toggle-graph-container { - margin-top: 5px; -} -#filters { - border: 1px solid #000000; - clear: both; - margin: 20px 2px 20px 0px; -} -#tests_filter, #graph_type_filter, #target_goal_filter { - margin: 5px 0 10px 20px; -} -#filter_headline { - font-weight: bold; - font-size: 16px; - margin: 5px 0 0 10px; -} -#filter_headline a { - font-weight: normal; - font-size: 12px; -} -#test_headline, #build_number_headline, #graph_type_headline, #target_goal_headline { - width: 120px; - float: left; -} -#tooltip { - position: absolute; - z-index: 3000; - border: 1px solid #111; - background-color: #eee; - color: #000; - padding: 5px; - opacity: 0.85; -} -#tooltip h3, #tooltip div { margin: 0; } === removed file 'dashboard_app/static/dashboard_app/css/pygments.css' --- dashboard_app/static/dashboard_app/css/pygments.css 2011-05-03 18:20:24 +0000 +++ dashboard_app/static/dashboard_app/css/pygments.css 1970-01-01 00:00:00 +0000 @@ -1,61 +0,0 @@ -.pygments .hll { background-color: #ffffcc } -.pygments .c { color: #60a0b0; font-style: italic } /* Comment */ -.pygments .err { border: 1px solid #FF0000 } /* Error */ -.pygments .k { color: #007020; font-weight: bold } /* Keyword */ -.pygments .o { color: #666666 } /* Operator */ -.pygments .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ -.pygments .cp { color: #007020 } /* Comment.Preproc */ -.pygments .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ -.pygments .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ -.pygments .gd { color: #A00000 } /* Generic.Deleted */ -.pygments .ge { font-style: italic } /* Generic.Emph */ -.pygments .gr { color: #FF0000 } /* Generic.Error */ -.pygments .gh { color: #000080; font-weight: bold } /* Generic.Heading */ -.pygments .gi { color: #00A000 } /* Generic.Inserted */ -.pygments .go { color: #808080 } /* Generic.Output */ -.pygments .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ -.pygments .gs { font-weight: bold } /* Generic.Strong */ -.pygments .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ -.pygments .gt { color: #0040D0 } /* Generic.Traceback */ -.pygments .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ -.pygments .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ -.pygments .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ -.pygments .kp { color: #007020 } /* Keyword.Pseudo */ -.pygments .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ -.pygments .kt { color: #902000 } /* Keyword.Type */ -.pygments .m { color: #40a070 } /* Literal.Number */ -.pygments .s { color: #4070a0 } /* Literal.String */ -.pygments .na { color: #4070a0 } /* Name.Attribute */ -.pygments .nb { color: #007020 } /* Name.Builtin */ -.pygments .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ -.pygments .no { color: #60add5 } /* Name.Constant */ -.pygments .nd { color: #555555; font-weight: bold } /* Name.Decorator */ -.pygments .ni { color: #d55537; font-weight: bold } /* Name.Entity */ -.pygments .ne { color: #007020 } /* Name.Exception */ -.pygments .nf { color: #06287e } /* Name.Function */ -.pygments .nl { color: #002070; font-weight: bold } /* Name.Label */ -.pygments .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ -.pygments .nt { color: #062873; font-weight: bold } /* Name.Tag */ -.pygments .nv { color: #bb60d5 } /* Name.Variable */ -.pygments .ow { color: #007020; font-weight: bold } /* Operator.Word */ -.pygments .w { color: #bbbbbb } /* Text.Whitespace */ -.pygments .mf { color: #40a070 } /* Literal.Number.Float */ -.pygments .mh { color: #40a070 } /* Literal.Number.Hex */ -.pygments .mi { color: #40a070 } /* Literal.Number.Integer */ -.pygments .mo { color: #40a070 } /* Literal.Number.Oct */ -.pygments .sb { color: #4070a0 } /* Literal.String.Backtick */ -.pygments .sc { color: #4070a0 } /* Literal.String.Char */ -.pygments .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ -.pygments .s2 { color: #4070a0 } /* Literal.String.Double */ -.pygments .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ -.pygments .sh { color: #4070a0 } /* Literal.String.Heredoc */ -.pygments .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ -.pygments .sx { color: #c65d09 } /* Literal.String.Other */ -.pygments .sr { color: #235388 } /* Literal.String.Regex */ -.pygments .s1 { color: #4070a0 } /* Literal.String.Single */ -.pygments .ss { color: #517918 } /* Literal.String.Symbol */ -.pygments .bp { color: #007020 } /* Name.Builtin.Pseudo */ -.pygments .vc { color: #bb60d5 } /* Name.Variable.Class */ -.pygments .vg { color: #bb60d5 } /* Name.Variable.Global */ -.pygments .vi { color: #bb60d5 } /* Name.Variable.Instance */ -.pygments .il { color: #40a070 } /* Literal.Number.Integer.Long */ === removed file 'dashboard_app/static/dashboard_app/css/wider-filter-horizontal.css' --- dashboard_app/static/dashboard_app/css/wider-filter-horizontal.css 2012-09-25 22:38:13 +0000 +++ dashboard_app/static/dashboard_app/css/wider-filter-horizontal.css 1970-01-01 00:00:00 +0000 @@ -1,16 +0,0 @@ -.selector { - width: 1000px; - float: left; -} - -.selector select { - width: 480px; - height: 17.2em; -} - -.selector-available, .selector-chosen { - float: left; - width: 480px; - text-align: center; - margin-bottom: 5px; -} === removed directory 'dashboard_app/static/dashboard_app/images' === removed file 'dashboard_app/static/dashboard_app/images/ajax-progress.gif' Binary files dashboard_app/static/dashboard_app/images/ajax-progress.gif 2013-09-09 11:47:00 +0000 and dashboard_app/static/dashboard_app/images/ajax-progress.gif 1970-01-01 00:00:00 +0000 differ === removed file 'dashboard_app/static/dashboard_app/images/attachment.png' Binary files dashboard_app/static/dashboard_app/images/attachment.png 2012-12-09 22:20:28 +0000 and dashboard_app/static/dashboard_app/images/attachment.png 1970-01-01 00:00:00 +0000 differ === removed file 'dashboard_app/static/dashboard_app/images/details_close.png' Binary files dashboard_app/static/dashboard_app/images/details_close.png 2011-07-08 04:20:37 +0000 and dashboard_app/static/dashboard_app/images/details_close.png 1970-01-01 00:00:00 +0000 differ === removed file 'dashboard_app/static/dashboard_app/images/details_open.png' Binary files dashboard_app/static/dashboard_app/images/details_open.png 2011-07-08 04:20:37 +0000 and dashboard_app/static/dashboard_app/images/details_open.png 1970-01-01 00:00:00 +0000 differ === removed file 'dashboard_app/static/dashboard_app/images/file-icon.png' Binary files dashboard_app/static/dashboard_app/images/file-icon.png 2012-12-07 03:09:21 +0000 and dashboard_app/static/dashboard_app/images/file-icon.png 1970-01-01 00:00:00 +0000 differ === removed file 'dashboard_app/static/dashboard_app/images/icon-fail.png' Binary files dashboard_app/static/dashboard_app/images/icon-fail.png 2010-12-20 11:48:23 +0000 and dashboard_app/static/dashboard_app/images/icon-fail.png 1970-01-01 00:00:00 +0000 differ === removed file 'dashboard_app/static/dashboard_app/images/icon-pass.png' Binary files dashboard_app/static/dashboard_app/images/icon-pass.png 2010-12-20 11:48:23 +0000 and dashboard_app/static/dashboard_app/images/icon-pass.png 1970-01-01 00:00:00 +0000 differ === removed file 'dashboard_app/static/dashboard_app/images/icon-skip.png' Binary files dashboard_app/static/dashboard_app/images/icon-skip.png 2013-03-20 14:54:38 +0000 and dashboard_app/static/dashboard_app/images/icon-skip.png 1970-01-01 00:00:00 +0000 differ === removed file 'dashboard_app/static/dashboard_app/images/icon-unknown.png' Binary files dashboard_app/static/dashboard_app/images/icon-unknown.png 2010-12-20 11:48:23 +0000 and dashboard_app/static/dashboard_app/images/icon-unknown.png 1970-01-01 00:00:00 +0000 differ === removed directory 'dashboard_app/static/dashboard_app/js' === removed file 'dashboard_app/static/dashboard_app/js/FixedHeader.min.js' --- dashboard_app/static/dashboard_app/js/FixedHeader.min.js 2011-07-08 04:20:37 +0000 +++ dashboard_app/static/dashboard_app/js/FixedHeader.min.js 1970-01-01 00:00:00 +0000 @@ -1,115 +0,0 @@ -/* - * File: FixedHeader.min.js - * Version: 2.0.4 - * Author: Allan Jardine (www.sprymedia.co.uk) - * - * Copyright 2009-2011 Allan Jardine, all rights reserved. - * - * This source file is free software, under either the GPL v2 license or a - * BSD (3 point) style license, as supplied with this software. - * - * This source file is distributed in the hope that it will be useful, but - * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY - * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details. - */ -var FixedHeader=function(b,a){if(typeof this.fnInit!="function"){alert("FixedHeader warning: FixedHeader must be initialised with the 'new' keyword."); -return}var c=this;var d={aoCache:[],oSides:{top:true,bottom:false,left:false,right:false},oZIndexes:{top:104,bottom:103,left:102,right:101},oMes:{iTableWidth:0,iTableHeight:0,iTableLeft:0,iTableRight:0,iTableTop:0,iTableBottom:0},nTable:null,bUseAbsPos:false,bFooter:false}; -this.fnGetSettings=function(){return d};this.fnUpdate=function(){this._fnUpdateClones(); -this._fnUpdatePositions()};this.fnInit(b,a)};FixedHeader.prototype={fnInit:function(b,a){var c=this.fnGetSettings(); -var d=this;this.fnInitSettings(c,a);if(typeof b.fnSettings=="function"){if(typeof b.fnVersionCheck=="functon"&&b.fnVersionCheck("1.6.0")!==true){alert("FixedHeader 2 required DataTables 1.6.0 or later. Please upgrade your DataTables installation"); -return}var e=b.fnSettings();if(e.oScroll.sX!=""||e.oScroll.sY!=""){alert("FixedHeader 2 is not supported with DataTables' scrolling mode at this time"); -return}c.nTable=e.nTable;e.aoDrawCallback.push({fn:function(){FixedHeader.fnMeasure(); -d._fnUpdateClones.call(d);d._fnUpdatePositions.call(d)},sName:"FixedHeader"})}else{c.nTable=b -}c.bFooter=($(">tfoot",c.nTable).length>0)?true:false;c.bUseAbsPos=(jQuery.browser.msie&&(jQuery.browser.version=="6.0"||jQuery.browser.version=="7.0")); -if(c.oSides.top){c.aoCache.push(d._fnCloneTable("fixedHeader","FixedHeader_Header",d._fnCloneThead)) -}if(c.oSides.bottom){c.aoCache.push(d._fnCloneTable("fixedFooter","FixedHeader_Footer",d._fnCloneTfoot)) -}if(c.oSides.left){c.aoCache.push(d._fnCloneTable("fixedLeft","FixedHeader_Left",d._fnCloneTLeft)) -}if(c.oSides.right){c.aoCache.push(d._fnCloneTable("fixedRight","FixedHeader_Right",d._fnCloneTRight)) -}FixedHeader.afnScroll.push(function(){d._fnUpdatePositions.call(d)});jQuery(window).resize(function(){FixedHeader.fnMeasure(); -d._fnUpdateClones.call(d);d._fnUpdatePositions.call(d)});FixedHeader.fnMeasure(); -d._fnUpdateClones();d._fnUpdatePositions()},fnInitSettings:function(b,a){if(typeof a!="undefined"){if(typeof a.top!="undefined"){b.oSides.top=a.top -}if(typeof a.bottom!="undefined"){b.oSides.bottom=a.bottom}if(typeof a.left!="undefined"){b.oSides.left=a.left -}if(typeof a.right!="undefined"){b.oSides.right=a.right}if(typeof a.zTop!="undefined"){b.oZIndexes.top=a.zTop -}if(typeof a.zBottom!="undefined"){b.oZIndexes.bottom=a.zBottom}if(typeof a.zLeft!="undefined"){b.oZIndexes.left=a.zLeft -}if(typeof a.zRight!="undefined"){b.oZIndexes.right=a.zRight}}b.bUseAbsPos=(jQuery.browser.msie&&(jQuery.browser.version=="6.0"||jQuery.browser.version=="7.0")) -},_fnCloneTable:function(f,e,d){var b=this.fnGetSettings();var a;if(jQuery(b.nTable.parentNode).css("position")!="absolute"){b.nTable.parentNode.style.position="relative" -}a=b.nTable.cloneNode(false);var c=document.createElement("div");c.style.position="absolute"; -c.className+=" FixedHeader_Cloned "+f+" "+e;if(f=="fixedHeader"){c.style.zIndex=b.oZIndexes.top -}if(f=="fixedFooter"){c.style.zIndex=b.oZIndexes.bottom}if(f=="fixedLeft"){c.style.zIndex=b.oZIndexes.left -}else{if(f=="fixedRight"){c.style.zIndex=b.oZIndexes.right}}c.appendChild(a);document.body.appendChild(c); -return{nNode:a,nWrapper:c,sType:f,sPosition:"",sTop:"",sLeft:"",fnClone:d}},_fnMeasure:function(){var d=this.fnGetSettings(),a=d.oMes,c=jQuery(d.nTable),b=c.offset(),f=this._fnSumScroll(d.nTable.parentNode,"scrollTop"),e=this._fnSumScroll(d.nTable.parentNode,"scrollLeft"); -a.iTableWidth=c.outerWidth();a.iTableHeight=c.outerHeight();a.iTableLeft=b.left+d.nTable.parentNode.scrollLeft; -a.iTableTop=b.top+f;a.iTableRight=a.iTableLeft+a.iTableWidth;a.iTableRight=FixedHeader.oDoc.iWidth-a.iTableLeft-a.iTableWidth; -a.iTableBottom=FixedHeader.oDoc.iHeight-a.iTableTop-a.iTableHeight},_fnSumScroll:function(c,b){var a=c[b]; -while(c=c.parentNode){if(c.nodeName!="HTML"&&c.nodeName!="BODY"){break}a=c[b]}return a -},_fnUpdatePositions:function(){var c=this.fnGetSettings();this._fnMeasure();for(var b=0,a=c.aoCache.length; -bb.iScrollTop){this._fnUpdateCache(g,"sPosition","absolute","position",c.style); -this._fnUpdateCache(g,"sTop",f.iTableTop+"px","top",c.style);this._fnUpdateCache(g,"sLeft",f.iTableLeft+"px","left",c.style) -}else{if(b.iScrollTop>f.iTableTop+e){this._fnUpdateCache(g,"sPosition","absolute","position",c.style); -this._fnUpdateCache(g,"sTop",(f.iTableTop+e)+"px","top",c.style);this._fnUpdateCache(g,"sLeft",f.iTableLeft+"px","left",c.style) -}else{if(d.bUseAbsPos){this._fnUpdateCache(g,"sPosition","absolute","position",c.style); -this._fnUpdateCache(g,"sTop",b.iScrollTop+"px","top",c.style);this._fnUpdateCache(g,"sLeft",f.iTableLeft+"px","left",c.style) -}else{this._fnUpdateCache(g,"sPosition","fixed","position",c.style);this._fnUpdateCache(g,"sTop","0px","top",c.style); -this._fnUpdateCache(g,"sLeft",(f.iTableLeft-b.iScrollLeft)+"px","left",c.style)}}}},_fnUpdateCache:function(e,c,b,d,a){if(e[c]!=b){a[d]=b; -e[c]=b}},_fnCloneThead:function(d){var c=this.fnGetSettings();var a=d.nNode;d.nWrapper.style.width=jQuery(c.nTable).outerWidth()+"px"; -while(a.childNodes.length>0){jQuery("thead th",a).unbind("click");a.removeChild(a.childNodes[0]) -}var b=jQuery("thead",c.nTable).clone(true)[0];a.appendChild(b);jQuery("thead:eq(0)>tr th",c.nTable).each(function(e){jQuery("thead:eq(0)>tr th:eq("+e+")",a).width(jQuery(this).width()) -});jQuery("thead:eq(0)>tr td",c.nTable).each(function(e){jQuery("thead:eq(0)>tr th:eq("+e+")",a)[0].style.width(jQuery(this).width()) -})},_fnCloneTfoot:function(d){var c=this.fnGetSettings();var a=d.nNode;d.nWrapper.style.width=jQuery(c.nTable).outerWidth()+"px"; -while(a.childNodes.length>0){a.removeChild(a.childNodes[0])}var b=jQuery("tfoot",c.nTable).clone(true)[0]; -a.appendChild(b);jQuery("tfoot:eq(0)>tr th",c.nTable).each(function(e){jQuery("tfoot:eq(0)>tr th:eq("+e+")",a).width(jQuery(this).width()) -});jQuery("tfoot:eq(0)>tr td",c.nTable).each(function(e){jQuery("tfoot:eq(0)>tr th:eq("+e+")",a)[0].style.width(jQuery(this).width()) -})},_fnCloneTLeft:function(f){var c=this.fnGetSettings();var b=f.nNode;var e=jQuery("tbody tr:eq(0) td",c.nTable).length; -var a=($.browser.msie&&($.browser.version=="6.0"||$.browser.version=="7.0"));while(b.childNodes.length>0){b.removeChild(b.childNodes[0]) -}b.appendChild(jQuery("thead",c.nTable).clone(true)[0]);b.appendChild(jQuery("tbody",c.nTable).clone(true)[0]); -if(c.bFooter){b.appendChild(jQuery("tfoot",c.nTable).clone(true)[0])}jQuery("thead tr th:gt(0)",b).remove(); -jQuery("tfoot tr th:gt(0)",b).remove();$("tbody tr",b).each(function(g){$("td:gt(0)",this).remove(); -if($.browser.mozilla||$.browser.opera){$("td",this).height($("tbody tr:eq("+g+")",that.dom.body).outerHeight()) -}else{$("td",this).height($("tbody tr:eq("+g+")",that.dom.body).outerHeight()-iBoxHack) -}if(!a){$("tbody tr:eq("+g+")",that.dom.body).height($("tbody tr:eq("+g+")",that.dom.body).outerHeight()) -}});var d=jQuery("thead tr th:eq(0)",c.nTable).outerWidth();b.style.width=d+"px"; -f.nWrapper.style.width=d+"px"},_fnCloneTRight:function(f){var c=this.fnGetSettings(); -var b=f.nNode;var e=jQuery("tbody tr:eq(0) td",c.nTable).length;var a=($.browser.msie&&($.browser.version=="6.0"||$.browser.version=="7.0")); -while(b.childNodes.length>0){b.removeChild(b.childNodes[0])}b.appendChild(jQuery("thead",c.nTable).clone(true)[0]); -b.appendChild(jQuery("tbody",c.nTable).clone(true)[0]);if(c.bFooter){b.appendChild(jQuery("tfoot",c.nTable).clone(true)[0]) -}jQuery("thead tr th:not(:nth-child("+e+"n))",b).remove();jQuery("tfoot tr th:not(:nth-child("+e+"n))",b).remove(); -$("tbody tr",b).each(function(g){$("td:lt("+e-1+")",this).remove();if($.browser.mozilla||$.browser.opera){$("td",this).height($("tbody tr:eq("+g+")",that.dom.body).outerHeight()) -}else{$("td",this).height($("tbody tr:eq("+g+")",that.dom.body).outerHeight()-iBoxHack) -}if(!a){$("tbody tr:eq("+g+")",that.dom.body).height($("tbody tr:eq("+g+")",that.dom.body).outerHeight()) -}});var d=jQuery("thead tr th:eq("+(e-1)+")",c.nTable).outerWidth();b.style.width=d+"px"; -f.nWrapper.style.width=d+"px"}};FixedHeader.oWin={iScrollTop:0,iScrollRight:0,iScrollBottom:0,iScrollLeft:0,iHeight:0,iWidth:0}; -FixedHeader.oDoc={iHeight:0,iWidth:0};FixedHeader.afnScroll=[];FixedHeader.fnMeasure=function(){var d=jQuery(window),c=jQuery(document),b=FixedHeader.oWin,a=FixedHeader.oDoc; -a.iHeight=c.height();a.iWidth=c.width();b.iHeight=d.height();b.iWidth=d.width();b.iScrollTop=d.scrollTop(); -b.iScrollLeft=d.scrollLeft();b.iScrollRight=a.iWidth-b.iScrollLeft-b.iWidth;b.iScrollBottom=a.iHeight-b.iScrollTop-b.iHeight -};jQuery(window).scroll(function(){FixedHeader.fnMeasure();for(var b=0,a=FixedHeader.afnScroll.length; -b1){j--}if(6*j<1){return i+(Z-i)*6*j}else{if(2*j<1){return Z}else{if(3*j<2){return i+(Z-i)*(2/3-j)*6}else{return i}}}}function Y(Z){var AE,p=1;Z=String(Z);if(Z.charAt(0)=="#"){AE=Z}else{if(/^rgb/.test(Z)){var m=g(Z);var AE="#",AF;for(var j=0;j<3;j++){if(m[j].indexOf("%")!=-1){AF=Math.floor(C(m[j])*255)}else{AF=Number(m[j])}AE+=I[N(AF,0,255)]}p=m[3]}else{if(/^hsl/.test(Z)){var m=g(Z);AE=c(m);p=m[3]}else{AE=B[Z]||Z}}}return{color:AE,alpha:p}}var L={style:"normal",variant:"normal",weight:"normal",size:10,family:"sans-serif"};var f={};function X(Z){if(f[Z]){return f[Z]}var m=document.createElement("div");var j=m.style;try{j.font=Z}catch(i){}return f[Z]={style:j.fontStyle||L.style,variant:j.fontVariant||L.variant,weight:j.fontWeight||L.weight,size:j.fontSize||L.size,family:j.fontFamily||L.family}}function P(j,i){var Z={};for(var AF in j){Z[AF]=j[AF]}var AE=parseFloat(i.currentStyle.fontSize),m=parseFloat(j.size);if(typeof j.size=="number"){Z.size=j.size}else{if(j.size.indexOf("px")!=-1){Z.size=m}else{if(j.size.indexOf("em")!=-1){Z.size=AE*m}else{if(j.size.indexOf("%")!=-1){Z.size=(AE/100)*m}else{if(j.size.indexOf("pt")!=-1){Z.size=m/0.75}else{Z.size=AE}}}}}Z.size*=0.981;return Z}function AA(Z){return Z.style+" "+Z.variant+" "+Z.weight+" "+Z.size+"px "+Z.family}function t(Z){switch(Z){case"butt":return"flat";case"round":return"round";case"square":default:return"square"}}function W(i){this.m_=V();this.mStack_=[];this.aStack_=[];this.currentPath_=[];this.strokeStyle="#000";this.fillStyle="#000";this.lineWidth=1;this.lineJoin="miter";this.lineCap="butt";this.miterLimit=D*1;this.globalAlpha=1;this.font="10px sans-serif";this.textAlign="left";this.textBaseline="alphabetic";this.canvas=i;var Z=i.ownerDocument.createElement("div");Z.style.width=i.clientWidth+"px";Z.style.height=i.clientHeight+"px";Z.style.overflow="hidden";Z.style.position="absolute";i.appendChild(Z);this.element_=Z;this.arcScaleX_=1;this.arcScaleY_=1;this.lineScale_=1}var M=W.prototype;M.clearRect=function(){if(this.textMeasureEl_){this.textMeasureEl_.removeNode(true);this.textMeasureEl_=null}this.element_.innerHTML=""};M.beginPath=function(){this.currentPath_=[]};M.moveTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"moveTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.lineTo=function(i,Z){var j=this.getCoords_(i,Z);this.currentPath_.push({type:"lineTo",x:j.x,y:j.y});this.currentX_=j.x;this.currentY_=j.y};M.bezierCurveTo=function(j,i,AI,AH,AG,AE){var Z=this.getCoords_(AG,AE);var AF=this.getCoords_(j,i);var m=this.getCoords_(AI,AH);e(this,AF,m,Z)};function e(Z,m,j,i){Z.currentPath_.push({type:"bezierCurveTo",cp1x:m.x,cp1y:m.y,cp2x:j.x,cp2y:j.y,x:i.x,y:i.y});Z.currentX_=i.x;Z.currentY_=i.y}M.quadraticCurveTo=function(AG,j,i,Z){var AF=this.getCoords_(AG,j);var AE=this.getCoords_(i,Z);var AH={x:this.currentX_+2/3*(AF.x-this.currentX_),y:this.currentY_+2/3*(AF.y-this.currentY_)};var m={x:AH.x+(AE.x-this.currentX_)/3,y:AH.y+(AE.y-this.currentY_)/3};e(this,AH,m,AE)};M.arc=function(AJ,AH,AI,AE,i,j){AI*=D;var AN=j?"at":"wa";var AK=AJ+U(AE)*AI-F;var AM=AH+J(AE)*AI-F;var Z=AJ+U(i)*AI-F;var AL=AH+J(i)*AI-F;if(AK==Z&&!j){AK+=0.125}var m=this.getCoords_(AJ,AH);var AG=this.getCoords_(AK,AM);var AF=this.getCoords_(Z,AL);this.currentPath_.push({type:AN,x:m.x,y:m.y,radius:AI,xStart:AG.x,yStart:AG.y,xEnd:AF.x,yEnd:AF.y})};M.rect=function(j,i,Z,m){this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath()};M.strokeRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.stroke();this.currentPath_=p};M.fillRect=function(j,i,Z,m){var p=this.currentPath_;this.beginPath();this.moveTo(j,i);this.lineTo(j+Z,i);this.lineTo(j+Z,i+m);this.lineTo(j,i+m);this.closePath();this.fill();this.currentPath_=p};M.createLinearGradient=function(i,m,Z,j){var p=new v("gradient");p.x0_=i;p.y0_=m;p.x1_=Z;p.y1_=j;return p};M.createRadialGradient=function(m,AE,j,i,p,Z){var AF=new v("gradientradial");AF.x0_=m;AF.y0_=AE;AF.r0_=j;AF.x1_=i;AF.y1_=p;AF.r1_=Z;return AF};M.drawImage=function(AO,j){var AH,AF,AJ,AV,AM,AK,AQ,AX;var AI=AO.runtimeStyle.width;var AN=AO.runtimeStyle.height;AO.runtimeStyle.width="auto";AO.runtimeStyle.height="auto";var AG=AO.width;var AT=AO.height;AO.runtimeStyle.width=AI;AO.runtimeStyle.height=AN;if(arguments.length==3){AH=arguments[1];AF=arguments[2];AM=AK=0;AQ=AJ=AG;AX=AV=AT}else{if(arguments.length==5){AH=arguments[1];AF=arguments[2];AJ=arguments[3];AV=arguments[4];AM=AK=0;AQ=AG;AX=AT}else{if(arguments.length==9){AM=arguments[1];AK=arguments[2];AQ=arguments[3];AX=arguments[4];AH=arguments[5];AF=arguments[6];AJ=arguments[7];AV=arguments[8]}else{throw Error("Invalid number of arguments")}}}var AW=this.getCoords_(AH,AF);var m=AQ/2;var i=AX/2;var AU=[];var Z=10;var AE=10;AU.push(" ','","");this.element_.insertAdjacentHTML("BeforeEnd",AU.join(""))};M.stroke=function(AM){var m=10;var AN=10;var AE=5000;var AG={x:null,y:null};var AL={x:null,y:null};for(var AH=0;AHAL.x){AL.x=Z.x}if(AG.y==null||Z.yAL.y){AL.y=Z.y}}}AK.push(' ">');if(!AM){R(this,AK)}else{a(this,AK,AG,AL)}AK.push("");this.element_.insertAdjacentHTML("beforeEnd",AK.join(""))}};function R(j,AE){var i=Y(j.strokeStyle);var m=i.color;var p=i.alpha*j.globalAlpha;var Z=j.lineScale_*j.lineWidth;if(Z<1){p*=Z}AE.push("')}function a(AO,AG,Ah,AP){var AH=AO.fillStyle;var AY=AO.arcScaleX_;var AX=AO.arcScaleY_;var Z=AP.x-Ah.x;var m=AP.y-Ah.y;if(AH instanceof v){var AL=0;var Ac={x:0,y:0};var AU=0;var AK=1;if(AH.type_=="gradient"){var AJ=AH.x0_/AY;var j=AH.y0_/AX;var AI=AH.x1_/AY;var Aj=AH.y1_/AX;var Ag=AO.getCoords_(AJ,j);var Af=AO.getCoords_(AI,Aj);var AE=Af.x-Ag.x;var p=Af.y-Ag.y;AL=Math.atan2(AE,p)*180/Math.PI;if(AL<0){AL+=360}if(AL<0.000001){AL=0}}else{var Ag=AO.getCoords_(AH.x0_,AH.y0_);Ac={x:(Ag.x-Ah.x)/Z,y:(Ag.y-Ah.y)/m};Z/=AY*D;m/=AX*D;var Aa=z.max(Z,m);AU=2*AH.r0_/Aa;AK=2*AH.r1_/Aa-AU}var AS=AH.colors_;AS.sort(function(Ak,i){return Ak.offset-i.offset});var AN=AS.length;var AR=AS[0].color;var AQ=AS[AN-1].color;var AW=AS[0].alpha*AO.globalAlpha;var AV=AS[AN-1].alpha*AO.globalAlpha;var Ab=[];for(var Ae=0;Ae')}else{if(AH instanceof u){if(Z&&m){var AF=-Ah.x;var AZ=-Ah.y;AG.push("')}}else{var Ai=Y(AO.fillStyle);var AT=Ai.color;var Ad=Ai.alpha*AO.globalAlpha;AG.push('')}}}M.fill=function(){this.stroke(true)};M.closePath=function(){this.currentPath_.push({type:"close"})};M.getCoords_=function(j,i){var Z=this.m_;return{x:D*(j*Z[0][0]+i*Z[1][0]+Z[2][0])-F,y:D*(j*Z[0][1]+i*Z[1][1]+Z[2][1])-F}};M.save=function(){var Z={};Q(this,Z);this.aStack_.push(Z);this.mStack_.push(this.m_);this.m_=d(V(),this.m_)};M.restore=function(){if(this.aStack_.length){Q(this.aStack_.pop(),this);this.m_=this.mStack_.pop()}};function H(Z){return isFinite(Z[0][0])&&isFinite(Z[0][1])&&isFinite(Z[1][0])&&isFinite(Z[1][1])&&isFinite(Z[2][0])&&isFinite(Z[2][1])}function y(i,Z,j){if(!H(Z)){return }i.m_=Z;if(j){var p=Z[0][0]*Z[1][1]-Z[0][1]*Z[1][0];i.lineScale_=k(b(p))}}M.translate=function(j,i){var Z=[[1,0,0],[0,1,0],[j,i,1]];y(this,d(Z,this.m_),false)};M.rotate=function(i){var m=U(i);var j=J(i);var Z=[[m,j,0],[-j,m,0],[0,0,1]];y(this,d(Z,this.m_),false)};M.scale=function(j,i){this.arcScaleX_*=j;this.arcScaleY_*=i;var Z=[[j,0,0],[0,i,0],[0,0,1]];y(this,d(Z,this.m_),true)};M.transform=function(p,m,AF,AE,i,Z){var j=[[p,m,0],[AF,AE,0],[i,Z,1]];y(this,d(j,this.m_),true)};M.setTransform=function(AE,p,AG,AF,j,i){var Z=[[AE,p,0],[AG,AF,0],[j,i,1]];y(this,Z,true)};M.drawText_=function(AK,AI,AH,AN,AG){var AM=this.m_,AQ=1000,i=0,AP=AQ,AF={x:0,y:0},AE=[];var Z=P(X(this.font),this.element_);var j=AA(Z);var AR=this.element_.currentStyle;var p=this.textAlign.toLowerCase();switch(p){case"left":case"center":case"right":break;case"end":p=AR.direction=="ltr"?"right":"left";break;case"start":p=AR.direction=="rtl"?"right":"left";break;default:p="left"}switch(this.textBaseline){case"hanging":case"top":AF.y=Z.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":AF.y=-Z.size/2.25;break}switch(p){case"right":i=AQ;AP=0.05;break;case"center":i=AP=AQ/2;break}var AO=this.getCoords_(AI+AF.x,AH+AF.y);AE.push('');if(AG){R(this,AE)}else{a(this,AE,{x:-i,y:0},{x:AP,y:Z.size})}var AL=AM[0][0].toFixed(3)+","+AM[1][0].toFixed(3)+","+AM[0][1].toFixed(3)+","+AM[1][1].toFixed(3)+",0,0";var AJ=K(AO.x/D)+","+K(AO.y/D);AE.push('','','');this.element_.insertAdjacentHTML("beforeEnd",AE.join(""))};M.fillText=function(j,Z,m,i){this.drawText_(j,Z,m,i,false)};M.strokeText=function(j,Z,m,i){this.drawText_(j,Z,m,i,true)};M.measureText=function(j){if(!this.textMeasureEl_){var Z='';this.element_.insertAdjacentHTML("beforeEnd",Z);this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML="";this.textMeasureEl_.style.font=this.font;this.textMeasureEl_.appendChild(i.createTextNode(j));return{width:this.textMeasureEl_.offsetWidth}};M.clip=function(){};M.arcTo=function(){};M.createPattern=function(i,Z){return new u(i,Z)};function v(Z){this.type_=Z;this.x0_=0;this.y0_=0;this.r0_=0;this.x1_=0;this.y1_=0;this.r1_=0;this.colors_=[]}v.prototype.addColorStop=function(i,Z){Z=Y(Z);this.colors_.push({offset:i,color:Z.color,alpha:Z.alpha})};function u(i,Z){q(i);switch(Z){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=Z;break;default:n("SYNTAX_ERR")}this.src_=i.src;this.width_=i.width;this.height_=i.height}function n(Z){throw new o(Z)}function q(Z){if(!Z||Z.nodeType!=1||Z.tagName!="IMG"){n("TYPE_MISMATCH_ERR")}if(Z.readyState!="complete"){n("INVALID_STATE_ERR")}}function o(Z){this.code=this[Z];this.message=Z+": DOM Exception "+this.code}var x=o.prototype=new Error;x.INDEX_SIZE_ERR=1;x.DOMSTRING_SIZE_ERR=2;x.HIERARCHY_REQUEST_ERR=3;x.WRONG_DOCUMENT_ERR=4;x.INVALID_CHARACTER_ERR=5;x.NO_DATA_ALLOWED_ERR=6;x.NO_MODIFICATION_ALLOWED_ERR=7;x.NOT_FOUND_ERR=8;x.NOT_SUPPORTED_ERR=9;x.INUSE_ATTRIBUTE_ERR=10;x.INVALID_STATE_ERR=11;x.SYNTAX_ERR=12;x.INVALID_MODIFICATION_ERR=13;x.NAMESPACE_ERR=14;x.INVALID_ACCESS_ERR=15;x.VALIDATION_ERR=16;x.TYPE_MISMATCH_ERR=17;G_vmlCanvasManager=E;CanvasRenderingContext2D=W;CanvasGradient=v;CanvasPattern=u;DOMException=o})()}; \ No newline at end of file === removed file 'dashboard_app/static/dashboard_app/js/filter-detail.js' --- dashboard_app/static/dashboard_app/js/filter-detail.js 2013-01-10 01:34:27 +0000 +++ dashboard_app/static/dashboard_app/js/filter-detail.js 1970-01-01 00:00:00 +0000 @@ -1,135 +0,0 @@ -var compareState = 0; -var compare1 = null, compare2 = null; -function cancelCompare () { - $("#filter-table").removeClass("select-compare1"); - $("#filter-table").removeClass("select-compare2"); - $("#filter-table").removeClass("select-compare3"); - $("#filter-table tr").removeClass("selected-1"); - $("#filter-table tr").removeClass("selected-2"); - $("#filter-table tr").unbind("click"); - $("#filter-table tr").unbind("hover"); - $("#filter-table tr").each(removeCheckbox); - $("#first-prompt").hide(); - $("#second-prompt").hide(); - $("#third-prompt").hide(); - $("#compare-button").button({label:"Compare builds"}); - compareState = 0; -} -function startCompare () { - $("#compare-button").button({label:"Cancel"}); - $("#filter-table").addClass("select-compare1"); - $("#filter-table tr").click(rowClickHandler); - $("#filter-table tr").each(insertCheckbox); - $("#filter-table tr").hover(rowHoverHandlerIn, rowHoverHandlerOut); - $("#first-prompt").show(); - compareState = 1; -} -function tagFromRow(tr) { - var firstCell = $(tr).find("td:eq(0)"); - return { - machinetag: firstCell.find("span").data("machinetag"), - usertag: firstCell.text() - }; -} -function rowClickHandler() { - if (compareState == 1) { - compare1 = tagFromRow($(this)); - $(this).addClass("selected-1"); - $(this).find("input").attr("checked", true); - $("#p2-build").text(compare1.usertag); - $("#first-prompt").hide(); - $("#second-prompt").show(); - $("#filter-table").removeClass("select-compare1"); - $("#filter-table").addClass("select-compare2"); - compareState = 2; - } else if (compareState == 2) { - var thistag = tagFromRow($(this)); - if (compare1.machinetag == thistag.machinetag) { - cancelCompare(); - startCompare(); - } else { - compare2 = thistag; - $(this).find("input").attr("checked", true); - $(this).addClass("selected-2"); - $("#second-prompt").hide(); - $("#third-prompt").show(); - $("#filter-table").removeClass("select-compare2"); - $("#filter-table").addClass("select-compare3"); - $("#filter-table input").attr("disabled", true); - $("#filter-table .selected-1 input").attr("disabled", false); - $("#filter-table .selected-2 input").attr("disabled", false); - $("#p3-build-1").text(compare1.usertag); - $("#p3-build-2").text(compare2.usertag); - $("#third-prompt a").attr("href", window.location + '/+compare/' + compare1.machinetag + '/' + compare2.machinetag); - compareState = 3; - } - } else if (compareState == 3) { - var thistag = tagFromRow($(this)); - if (thistag.machinetag == compare1.machinetag || thistag.machinetag == compare2.machinetag) { - $("#second-prompt").show(); - $("#third-prompt").hide(); - $("#filter-table").addClass("select-compare2"); - $("#filter-table").removeClass("select-compare3"); - $("#filter-table input").attr("disabled", false); - compareState = 2; - $(this).find("input").attr("checked", false); - if (thistag.machinetag == compare1.machinetag) { - compare1 = compare2; - $("#filter-table .selected-1").removeClass("selected-1"); - $("#filter-table .selected-2").addClass("selected-1"); - $("#p2-build").text(compare1.usertag); - } - $("#filter-table .selected-2").removeClass("selected-2"); - } - } - tagFromRow(this); -} -function rowHoverHandlerIn() { - $(this).addClass("hover"); -} -function rowHoverHandlerOut() { - $(this).removeClass("hover"); -} -function insertCheckbox() { - var row = $(this); - var checkbox = $(''); - row.find("td:first").prepend(checkbox); -} -function removeCheckbox() { - var row = $(this); - row.find('input').remove(); -} -$(window).load( - function () { - $("#filter-table").dataTable().fnSettings().fnRowCallback = function(tr, data, index) { - if (compareState) { - insertCheckbox.call(tr); - $(tr).click(rowClickHandler); - $("#filter-table tr").hover(rowHoverHandlerIn, rowHoverHandlerOut); - if (compareState >= 2 && tagFromRow(tr).machinetag == compare1.machinetag) { - $(tr).addClass("selected-1"); - $(tr).find("input").attr("checked", true); - } - if (compareState >= 3) { - if (tagFromRow(tr).machinetag == compare2.machinetag) { - $(tr).addClass("selected-2"); - $(tr).find("input").attr("checked", true); - } else if (tagFromRow(tr).machinetag != compare1.machinetag) { - $(tr).find("input").attr("disabled", true); - } - } - } - return tr; - }; - $("#compare-button").button(); - $("#compare-button").click( - function (e) { - if (compareState == 0) { - startCompare(); - } else { - cancelCompare(); - } - } - ); - } -); === removed file 'dashboard_app/static/dashboard_app/js/filter-edit.js' --- dashboard_app/static/dashboard_app/js/filter-edit.js 2012-09-20 22:17:38 +0000 +++ dashboard_app/static/dashboard_app/js/filter-edit.js 1970-01-01 00:00:00 +0000 @@ -1,133 +0,0 @@ -$(function () { -function updateTestCasesFromTest() { - var test_id=$(this).find("option:selected").html(); - var selects = $(this).closest('tr').find('.test-case-formset select'); - selects.each( - function () { - $(this).empty(); - }); - $.ajax( - { - url: test_case_url + test_id, - dataType: 'json', - success: function (data) { - selects.each( - function () { - var select = $(this); - $(data).each( - function (index, val) { - var test_case_id = val.test_case_id; - if (test_case_id.length > 50) { - test_case_id = test_case_id.substring(0, 50) + "..."; - } - select.append(new Option(test_case_id, val.id)); - }); - select.removeAttr("disabled"); - }); - } - }); -}; - -$("#id_tests_empty_form .test-case-formset-empty select").attr('disabled', 'disabled'); -$(".test-cell select").change(updateTestCasesFromTest); - -var nameAutocompleteConfig = { - source: attr_name_completion_url - }; - -var valueAutocompleteConfig = { - source: function (request, response) { - var attrName = this.element.closest('tr').find('.name input').val(); - $.getJSON( - attr_value_completion_url, - { - 'name': attrName, - 'term': request.term - }, - function (data) { - response(data); - } - ); - } - }; - -$("tbody .name input").autocomplete(nameAutocompleteConfig); -$("tbody .value input").autocomplete(valueAutocompleteConfig); - -$("#attributes-table tbody tr").formset( - { - formTemplate: '#id_attributes_empty_form', - prefix: "attributes", - formCssClass: "attributes-dynamic-form", - addText: "Add a required attribute", - added: function(row) { - row.find(".name input").unbind(); - row.find(".name input").autocomplete(nameAutocompleteConfig); - row.find(".value input").unbind(); - row.find(".value input").autocomplete(valueAutocompleteConfig); - } - }); - -var formsetCallCount = 0; - -function formsetTestCase(test_row) { - var addText; - if (test_row.find(".test-case-formset select").size() < 2) { - addText = 'Specify test cases'; - } else { - addText = 'Add another test case'; - test_row.find('> td:last').hide(); - } - - var index = test_row.parent().children('.test-dynamic-form').index(test_row); - - var fs = test_row.find(".test-case-formset > tbody > tr").formset( - { - formTemplate: test_row.find(".test-case-formset-empty"), - formCssClass: "test-cases-dynamic-form-" + formsetCallCount, - addText: addText, - deleteText: "Remove test case", - prefix: "tests-" + index, - added: function (row2) { - test_row.find('.add-row').text('Add another test case'); - test_row.find('> td:last').hide(); - }, - removed: function (row2) { - if (test_row.find(".test-case-formset select").size() < 2) { - test_row.find('.add-row').text("Specify test cases"); - test_row.find('> td:last').show(); - } - } - } - ); - - test_row.data('formset', fs); - - formsetCallCount += 1; -} - -$("#tests-table > tbody > tr").formset( - { - formTemplate: '#id_tests_empty_form', - prefix: "tests", - formCssClass: "test-dynamic-form", - addText: "Add a test", - deleteText: "Remove test", - added: formsetTestCase, - removed: function () { - $("#tests-table > tbody > tr.test-dynamic-form").each( - function () { - var index = $(this).parent().children('.test-dynamic-form').index($(this)); - $(this).data('formset').data('options').prefix = 'tests-' + index; - }); - } - } -); - -$("#tests-table > tbody > tr").each( - function () { - formsetTestCase($(this)); - } -); - -}); \ No newline at end of file === removed file 'dashboard_app/static/dashboard_app/js/image-report-editor.js' --- dashboard_app/static/dashboard_app/js/image-report-editor.js 2013-09-12 14:24:11 +0000 +++ dashboard_app/static/dashboard_app/js/image-report-editor.js 1970-01-01 00:00:00 +0000 @@ -1,221 +0,0 @@ -select_filter = function() { - // Open the filter select dialog. - $('#filter_select_dialog').dialog('open'); -} - -filters_callback = function(id, name) { - // Function which will be called when a filter is selected from the dialog. - - if ($('#id_chart_type').val() == "pass/fail") { - url = "/dashboard/filters/+get-tests-json"; - } else { - url = "/dashboard/filters/+get-test-cases-json"; - } - - $.ajax({ - url: url, - async: false, - data: {"id": id}, - beforeSend: function () { - $('#filter-container').remove(); - $('#filter_select_dialog').dialog('close'); - $('#loading_dialog').dialog('open'); - }, - success: function (data) { - $('#loading_dialog').dialog('close'); - $("#id_filter").val(id); - add_filter_container(data, name); - }, - error: function(data, status, error) { - $('#loading_dialog').dialog('close'); - alert('Filter could not be loaded, please try again.'); - } - }); -} - -add_filter_container = function(data, title) { - // Adds elements which contain tests or test cases from the previously - // selected filter. - - content = '
' + title + '
'; - - if ($('#id_chart_type').val() == "pass/fail") { - test_label = "Tests"; - } else { - test_label = "Test Cases"; - } - - content += '

' + - 'Select ' + test_label + '

'; - - content += ''; - - content += '' + - 'Choose All'; - content += '
'; - - content += '
    ' + - '
  • ' + - '
  • ' + - '
'; - - content += '

' + - 'Choosen ' + test_label + '

'; - - content += ''; - content += '' + - 'Remove All'; - content += '
'; - - content += '
Alias
'; - content += ''; - content += '
'; - - $('
').html( - content).appendTo($('#filters_div')); - - update_events(); -} - -update_events = function() { - // Add onclick events to the links controlling the select boxes. - - $('#add_link').click(function() { - move_options('available_tests', 'chosen_tests'); - }); - $('#remove_link').click(function() { - move_options('chosen_tests', 'available_tests'); - }); - $('#add_all_link').click(function() { - $('#available_tests option').each(function() { - $(this).attr('selected', 'selected'); - }); - move_options('available_tests', 'chosen_tests'); - }); - $('#remove_all_link').click(function() { - $('#chosen_tests option').each(function() { - $(this).attr('selected', 'selected'); - }); - move_options('chosen_tests', 'available_tests'); - }); -} - -move_options = function(from_element, to_element) { - var options = $("#" + from_element + " option:selected"); - $("#" + to_element).append(options.clone()); - $(options).remove(); - - update_aliases(); - toggle_alias(); -} - -add_selected_options = function() { - // Adds options from chosen tests select box as hidden fields. - - $('#chosen_tests option').each(function() { - if ($('#id_chart_type').val() == "pass/fail") { - field_name = "image_chart_tests"; - } else { - field_name = "image_chart_test_cases"; - } - $('').appendTo($('#add_filter_link')); - }); -} - -update_aliases = function() { - // Update hidden aliases inputs based on chosen tests. - - $('#chosen_tests option').each(function() { - if ($('#alias_' + $(this).val()).length == 0) { - $('').appendTo($('#aliases_div')); - } - }); - chosen_tests = $.map($('#chosen_tests option'), function(e) { - return e.value; - }); - $('.alias').each(function(index, value) { - test_id = value.id.split('_')[1]; - - if (chosen_tests.indexOf(test_id) == -1) { - $('#alias_' + test_id).remove(); - } - }); -} - -toggle_alias = function() { - // Show/hide alias input field. - - if ($('#chosen_tests option:selected').length == 1) { - $('#alias_container').show(); - test_id = $('#chosen_tests option:selected').val(); - $('#alias').val($('#alias_' + test_id).val()); - } else { - $('#alias_container').hide(); - } -} - -copy_alias = function(e) { - // Populate alias input based on the selected test. - - if ($('#chosen_tests option:selected').length == 1) { - test_id = $('#chosen_tests option:selected').val(); - $('#alias_' + test_id).val(e.value); - } -} - -sort_aliases = function() { - // Pre submit function. Sort the aliases hidden inputs. - - $('#aliases_div input').sort(function(a,b) { - return a.dataset.sid > b.dataset.sid; - }).appendTo('#aliases_div'); -} - -init_filter_dialog = function() { - // Setup the filter table dialog. - - var filter_dialog = $('
'); - $('#all-filters_wrapper').wrapAll(filter_dialog); - - $('#filter_select_dialog').dialog({ - autoOpen: false, - title: 'Select Filter', - draggable: false, - height: 280, - width: 420, - modal: true, - resizable: false - }); -} - -init_loading_dialog = function() { - // Setup the loading image dialog. - - $('#loading_dialog').dialog({ - autoOpen: false, - title: '', - draggable: false, - height: 35, - width: 250, - modal: true, - resizable: false, - dialogClass: 'loading-dialog' - }); - - $('.loading-dialog div.ui-dialog-titlebar').hide(); -} === removed file 'dashboard_app/static/dashboard_app/js/image-report.js' --- dashboard_app/static/dashboard_app/js/image-report.js 2013-08-14 12:25:50 +0000 +++ dashboard_app/static/dashboard_app/js/image-report.js 1970-01-01 00:00:00 +0000 @@ -1,530 +0,0 @@ -function _resize() { - // I couldn't figure out how to do this in CSS: resize the table - // so that it takes as much space as it can without expanding the - // page horizontally. - var space = parseInt($("#lava-breadcrumbs").outerWidth() - $("#outer-table").outerWidth()); - space -= $("#lava-content").outerWidth() - $("#lava-content").width(); - var table = $("#results-table"), scroller=$("#scroller"); - var atRight = scroller.width() + scroller.scrollLeft() >= table.attr('scrollWidth'); - scroller.width(scroller.width() + space); - if (atRight) scroller.scrollLeft(table.attr('scrollWidth')); -} -function _fixRowHeights () { - var index = 0; - var nameRows = $("#test-run-names > tbody > tr"); - var resultRows = $("#results-table > tbody > tr"); - for (; index < nameRows.length; index++) { - var nameRow = $(nameRows[index]); - var resultRow = $(resultRows[index]); - var nameRowHeight = parseInt(nameRow.css('height')); - var resultRowHeight = parseInt(resultRow.css('height')); - nameRow.css('height', Math.max(nameRowHeight, resultRowHeight)); - resultRow.css('height', Math.max(nameRowHeight, resultRowHeight)); - } -} - -function toggle_graph () { - $("#outer-container").toggle(); - $(".tickLabels").toggle(); - update_plot(columns, chart_data, test_names); - store_filters(); -} - -function update_filters(column_data, test_run_names) { - for (iter in column_data) { - build_number = column_data[iter]["number"].split('.')[0]; - build_date = column_data[iter]["date"]; - $("#build_number_start").append($('