savannah-cvs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Savannah-cvs] [SCM] Savane-cleanup framework branch, master, updated. 4


From: Sylvain Beucler
Subject: [Savannah-cvs] [SCM] Savane-cleanup framework branch, master, updated. 411a3fd68ec719e929c9b37a4cf7a8abab8d0379
Date: Sun, 14 Mar 2010 12:35:59 +0000

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "Savane-cleanup framework".

The branch, master has been updated
       via  411a3fd68ec719e929c9b37a4cf7a8abab8d0379 (commit)
      from  6720d5a02dcc65c9f9fc70672326cbf2387ad698 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
http://git.savannah.gnu.org/cgit/savane-cleanup/framework.git/commit/?id=411a3fd68ec719e929c9b37a4cf7a8abab8d0379

commit 411a3fd68ec719e929c9b37a4cf7a8abab8d0379
Author: Sylvain Beucler <address@hidden>
Date:   Sun Mar 14 13:36:25 2010 +0100

    More on trackers data structure

diff --git a/savane/tracker/models.py b/savane/tracker/models.py
index b0f9fb4..a62b030 100644
--- a/savane/tracker/models.py
+++ b/savane/tracker/models.py
@@ -21,122 +21,173 @@ class Field(models.Model):
     name = models.CharField(max_length=255, db_index=True)
     display_type = models.CharField(max_length=255, 
choices=DISPLAY_TYPE_CHOICES)
     display_size = models.CharField(max_length=255)
+      # new:
+      # display_size_min = models.IntegerField(blank=True, null=True)
+      # display_size_max = models.IntegerField(blank=True, null=True)
     label  = models.CharField(max_length=255)
     description = models.TextField()
     scope = models.CharField(max_length=1, choices=SCOPE_CHOICES)
     required = models.BooleanField()
     empty_ok = models.BooleanField()
     keep_history = models.BooleanField()
-    special = models.BooleanField() # TODO: ???
-    custom = models.BooleanField() # TODO: ???
+    special = models.BooleanField(help_text="field is not entered by the user 
but by the system")
+    custom = models.BooleanField(help_text="let the user change the label and 
description")
+
+class FieldUsage(models.Model):
+    TRANSITION_DEFAULT_AUTH_CHOICES = (('', 'undefined'),
+                                       ('A', 'allowed'),
+                                       ('F', 'forbidden'),)
+    SHOW_ON_ADD_CHOICES = (('0', 'no'),
+                           ('1', 'show to logged in users'),
+                           ('2', 'show to anonymous users'),
+                           ('3', 'show to both logged in and anonymous 
users'),)
+    CUSTOM_EMPTY_OK_CHOICES = (('0', 'mandatory only if it was presented to 
the original submitter'),
+                               ('1', 'optional (empty values are accepted)'),
+                               ('3', 'mandatory'),)
+    group = models.ForeignKey('auth.Group')
+    use_it = models.BooleanField("used")
+    show_on_add = models.CharField(max_length=1, choices=SHOW_ON_ADD_CHOICES,
+                                   default='0', blank=True, null=True)
+      # new:
+      # show_on_add_logged_in = models.BooleanField("show to logged in users")
+      # show_on_add_anonymous = models.BooleanField("show to anonymous users")
+    show_on_add_members = models.BooleanField("show to project members")
+    place = models.IntegerField() # new:rank
+    transition_default_auth = models.CharField(max_lenth=1, 
choices=TRANSITION_DEFAULT_AUTH, default='A')
+    
+    # Specific (bad!) fields for custom fields:
+    custom_label = models.CharField(max_length=255, blank=True, null=True)
+    custom_description = models.CharField(max_length=255, blank=True, 
null=True)
+    custom_display_size = models.CharField(max_length=255, blank=True, 
null=True)
+      # new:
+      # custom_display_size_min = models.IntegerField(blank=True, null=True)
+      # custom_display_size_max = models.IntegerField(blank=True, null=True)
+    custom_empty_ok = models.CharField(max_length=1, 
choices=CUSTOM_EMPTY_OK_CHOICES,
+                                       default='0', blank=True, null=True)
+    custom_keep_history = models.BooleanField("keep field value changes in 
history")
 
 class FieldValue(models.Model):
     """
-    Values for select-box (SB) fields
+    Choice for a select-box (SB) field
     """
+    class Meta:
+        unique_together = (('bug_field', 'group', 'value_id'),)
+
     STATUS_CHOICES = (('A', 'active'),
                       ('H', 'hidden'), # mask previously-active or system 
fields
                       ('P', 'permanent'),) # status cannot be modified, always 
visible
     bug_field = models.ForeignKey('Field')
-    group = models.ForeignKey(auth.Group, null=True)
-      # => NULL if value is system-wide;
-      # but not a duplicate of status='P': 114 group_id's for status=H at SV
-    value_id = models.IntegerField(db_index=True) # TODO: ???
-    value = models.CharField(max_length=255)
+    group = models.ForeignKey('auth.Group')
+    value_id = models.IntegerField(db_index=True) # group_specific value 
identifier
+      # somehow duplicate of 'id', but might be useful when moving a bug to 
another group
+    value = models.CharField(max_length=255) # label
     description = models.TextField()
-    rank = models.IntegerField() # old:order_id
+    order_id = models.IntegerField() # new:rank
     status = models.CharField(max_length=1, choices=STATUS_CHOICES, 
default='A', db_index=True)
 
     # Field category: specific (bad!) field for e-mail notifications
-    email_ad = models.TextField(help_text="comma-separated list of e-mail 
addresses")
-    send_all_flag = models.BooleanField(default=True)
+    email_ad = models.TextField(help_text="comma-separated list of e-mail 
addresses"
+                                + " to notify when an item is created or 
modified"
+                                + " in this category")
+    send_all_flag = models.BooleanField("send on all updates", default=True)
 
-class FieldUsage(models.Model):
-    group = models.ForeignKey(auth.Group)
-  #`use_it` int(11) NOT NULL default '0',
-  #`show_on_add` int(11) NOT NULL default '0',
-  #`show_on_add_members` int(11) NOT NULL default '0',
-  #`place` int(11) NOT NULL default '0',
-  #`custom_label` varchar(255) default NULL,
-  #`custom_description` varchar(255) default NULL,
-  #`custom_display_size` varchar(255) default NULL,
-  #`custom_empty_ok` int(11) default NULL,
-  #`custom_keep_history` int(11) default NULL,
-  #`transition_default_auth` char(1) NOT NULL default 'A',
 
+class Item(models.Model):
+    # TODO: default '100' (aka 'nobody' or 'None', depending on
+    # fields) -> change to NULL?
 
+    group = models.ForeignKey('auth.Group')
+    spamscore = models.IntegerField(default=0)
+    ip = IPAddressField(blank=True, null=True)
+    submitted_by = models.ForeignKey('auth.User', default=100)
+    date = models.DateTimeField()
+    close_date = models.DateTimeField(blank=True, null=True)
 
-class Item(models.Model):
-    pass
-  #group = models.ForeignKey(auth.Group)
-  #`status_id` int(11) NOT NULL default '100',
-  #`severity` int(11) NOT NULL default '5',
-  #`privacy` int(2) NOT NULL default '1',
-  #`discussion_lock` int(1) default '0',
-  #`vote` int(11) NOT NULL default '0',
-  #`spamscore` int(2) default '0',
-  #`ip` varchar(15) default NULL,
-  #`category_id` int(11) NOT NULL default '100',
-  #`submitted_by` int(11) NOT NULL default '100',
-  #`assigned_to` int(11) NOT NULL default '100',
-  #`date` int(11) NOT NULL default '0',
-  #`summary` text,
-  #`details` text,
-  #`close_date` int(11) default NULL,
-  #`bug_group_id` int(11) NOT NULL default '100',
-  #`resolution_id` int(11) NOT NULL default '100',
-  #`category_version_id` int(11) NOT NULL default '100',
-  #`platform_version_id` int(11) NOT NULL default '100',
-  #`reproducibility_id` int(11) NOT NULL default '100',
-  #`size_id` int(11) NOT NULL default '100',
-  #`fix_release_id` int(11) NOT NULL default '100',
-  #`plan_release_id` int(11) NOT NULL default '100',
-  #`hours` float(10,2) NOT NULL default '0.00',
-  #`component_version` varchar(255) NOT NULL default '',
-  #`fix_release` varchar(255) NOT NULL default '',
-  #`plan_release` varchar(255) NOT NULL default '',
-  #`priority` int(11) NOT NULL default '5',
-  #`planned_starting_date` int(11) default NULL,
-  #`planned_close_date` int(11) default NULL,
-  #`percent_complete` int(11) NOT NULL default '1',
-  #`keywords` varchar(255) NOT NULL default '',
-  #`release_id` int(11) NOT NULL default '100',
-  #`release` varchar(255) NOT NULL default '',
-  #`originator_name` varchar(255) NOT NULL default '',
-  #`originator_email` varchar(255) NOT NULL default '',
-  #`originator_phone` varchar(255) NOT NULL default '',
-  #`custom_tf1` varchar(255) NOT NULL default '',
-  #`custom_tf2` varchar(255) NOT NULL default '',
-  #`custom_tf3` varchar(255) NOT NULL default '',
-  #`custom_tf4` varchar(255) NOT NULL default '',
-  #`custom_tf5` varchar(255) NOT NULL default '',
-  #`custom_tf6` varchar(255) NOT NULL default '',
-  #`custom_tf7` varchar(255) NOT NULL default '',
-  #`custom_tf8` varchar(255) NOT NULL default '',
-  #`custom_tf9` varchar(255) NOT NULL default '',
-  #`custom_tf10` varchar(255) NOT NULL default '',
-  #`custom_ta1` text NOT NULL,
-  #`custom_ta2` text NOT NULL,
-  #`custom_ta3` text NOT NULL,
-  #`custom_ta4` text NOT NULL,
-  #`custom_ta5` text NOT NULL,
-  #`custom_ta6` text NOT NULL,
-  #`custom_ta7` text NOT NULL,
-  #`custom_ta8` text NOT NULL,
-  #`custom_ta9` text NOT NULL,
-  #`custom_ta10` text NOT NULL,
-  #`custom_sb1` int(11) NOT NULL default '100',
-  #`custom_sb2` int(11) NOT NULL default '100',
-  #`custom_sb3` int(11) NOT NULL default '100',
-  #`custom_sb4` int(11) NOT NULL default '100',
-  #`custom_sb5` int(11) NOT NULL default '100',
-  #`custom_sb6` int(11) NOT NULL default '100',
-  #`custom_sb7` int(11) NOT NULL default '100',
-  #`custom_sb8` int(11) NOT NULL default '100',
-  #`custom_sb9` int(11) NOT NULL default '100',
-  #`custom_sb10` int(11) NOT NULL default '100',
-  #`custom_df1` int(11) NOT NULL default '0',
-  #`custom_df2` int(11) NOT NULL default '0',
-  #`custom_df3` int(11) NOT NULL default '0',
-  #`custom_df4` int(11) NOT NULL default '0',
-  #`custom_df5` int(11) NOT NULL default '0',
+    ##
+    # Field values
+    ##
+    # Note: For select boxes, FK should be limited to same group, and
+    # to a specific field each e.g.:
+    # severity = models.ForeignKey('FieldValue', to_field='value_id', 
default=5)
+    #            + constraint(same group) + constraint(field_name='severity')
+    # To avoid unnecessary burden, let's drop the above incomplete ForeignKey
+
+    # More generally one can wonder if this should be moved to a M2M
+    # bug<->field table; but after we're done with the migration from
+    # the previous database :)
+
+    # - fields with hard-coded processing
+    summary = models.TextField()
+    details = models.TextField()
+    privacy = models.IntegerField(default=5)
+    discussion_lock = models.IntegerField(default=0)
+    vote = models.IntegerField(default=0)
+    category_id = models.IntegerField(default=100)
+    assigned_to = models.IntegerField(default=100)
+
+    # - other fields
+    status_id = models.IntegerField(default=100, verbose_name="open/closed")
+    resolution_id = models.IntegerField(default=100)
+    severity = models.IntegerField(default=5)
+    planned_starting_date = models.DateTimeField(blank=True, null=True)
+    planned_close_date = models.DateTimeField(blank=True, null=True)
+    percent_complete = models.IntegerField(default=1) # SB
+    reproducibility_id = models.IntegerField(default=100)
+    bug_group_id = models.IntegerField(default=100, verbose_name="item group")
+    keywords = models.CharField(max_length=255)
+    hours = models.FloatField(default=0.0)
+    priority = models.IntegerField(default=5)
+    size_id = models.IntegerField(default=100)
+    platform_version_id = models.IntegerField(default=100)
+    fix_release = models.CharField(max_length=255)
+    fix_release_id = models.IntegerField(default=100)
+    plan_release = models.CharField(max_length=255)
+    plan_release_id = models.IntegerField(default=100)
+    release = models.CharField(max_length=255)
+    release_id = models.IntegerField(default=100)
+    category_version_id = models.IntegerField(default=100)
+    component_version = models.CharField(max_length=255)
+    originator_name = models.CharField(max_length=255)
+    originator_email = models.CharField(max_length=255)
+    originator_phone = models.CharField(max_length=255)
+
+    # - fields dedicated to user customization
+    custom_tf1  = models.CharField(max_length=255)
+    custom_tf2  = models.CharField(max_length=255)
+    custom_tf3  = models.CharField(max_length=255)
+    custom_tf4  = models.CharField(max_length=255)
+    custom_tf5  = models.CharField(max_length=255)
+    custom_tf5  = models.CharField(max_length=255)
+    custom_tf6  = models.CharField(max_length=255)
+    custom_tf7  = models.CharField(max_length=255)
+    custom_tf8  = models.CharField(max_length=255)
+    custom_tf9  = models.CharField(max_length=255)
+    custom_tf10 = models.CharField(max_length=255)
+
+    custom_ta1  = models.TextField()
+    custom_ta2  = models.TextField()
+    custom_ta3  = models.TextField()
+    custom_ta4  = models.TextField()
+    custom_ta5  = models.TextField()
+    custom_ta6  = models.TextField()
+    custom_ta7  = models.TextField()
+    custom_ta8  = models.TextField()
+    custom_ta9  = models.TextField()
+    custom_ta10 = models.TextField()
+
+    custom_sb1  = models.IntegerField(default=100)
+    custom_sb2  = models.IntegerField(default=100)
+    custom_sb3  = models.IntegerField(default=100)
+    custom_sb4  = models.IntegerField(default=100)
+    custom_sb5  = models.IntegerField(default=100)
+    custom_sb6  = models.IntegerField(default=100)
+    custom_sb7  = models.IntegerField(default=100)
+    custom_sb8  = models.IntegerField(default=100)
+    custom_sb9  = models.IntegerField(default=100)
+    custom_sb10 = models.IntegerField(default=100)
+
+    custom_df1  = models.DateTimeField()
+    custom_df2  = models.DateTimeField()
+    custom_df3  = models.DateTimeField()
+    custom_df4  = models.DateTimeField()
+    custom_df5  = models.DateTimeField()

-----------------------------------------------------------------------

Summary of changes:
 savane/tracker/models.py |  245 ++++++++++++++++++++++++++++------------------
 1 files changed, 148 insertions(+), 97 deletions(-)


hooks/post-receive
-- 
Savane-cleanup framework




reply via email to

[Prev in Thread] Current Thread [Next in Thread]