Jump to >

reviewboard.reviews.fields

Definitions for review request fields.

class FieldSetRegistry[source]

A registry for field sets.

This keeps the fieldsets in the registered order, so iterating through them will do so in the same order.

register(fieldset)[source]

Register the fieldset.

This will also register all field classes registered on the fieldset on the field registry.

Parameters

fieldset (type) – The fieldset to register, as a BaseReviewRequestFieldSet subclass.

unregister(fieldset)[source]

Unregister the fieldset.

This will unregister all field classes on the fieldset from the field registry.

Parameters

fieldset (type) – The field to remove, as a BaseReviewRequestFieldSet subclass.

get_defaults()[source]

Return the list of built-in fieldsets.

Returns

A list of the built-in BaseReviewRequestFieldSet subclasses.

Return type

list

class FieldRegistry[source]

A registry for review request fields.

populate()[source]

Populate the registry.

class BaseReviewRequestFieldSet(review_request_details)[source]

Base class for sets of review request fields.

A fieldset stores a list of fields that are rendered on the review request page. They may contain default fields, and new fields can be added or removed.

Review Board provides three main fieldsets: “main”, “info”, and “reviewers”. Others can be added by subclassing and registering through register_review_request_fieldset.

classmethod is_empty()[source]

Return whether the fieldset is empty.

A fieldset is empty if there are no field classes registered. An empty fieldset will not be displayed on the page.

classmethod add_field(field_cls)[source]

Add a field class to this fieldset.

The field will be rendered inside this fieldset on the page.

A given field class can only be in one fieldset. Its field_id must be unique.

Parameters

field_cls (class) – The field class to add.

classmethod remove_field(field_cls)[source]

Remove a field class from this fieldset.

The field class must have been previously added to this fieldset.

Parameters

field_cls (class) – The field class to remove.

class BaseReviewRequestField(review_request_details, request=None)[source]

Base class for a field on a review request.

A field is responsible for displaying data from a review request, handling any editing requirements if necessary, recording changes in the ChangeDescription, and rendering those changes.

Each field must have its own unique field_id. This ID will be used when looking up or storing the field’s value.

It is recommended that fields provided by extensions prefix their field ID with some sort of identifier for the extension or the vendor.

Creating a new field requires subclassing BaseReviewRequestField and overriding any fields or functions necessary. Its class must then be added to a fieldset.

A field will be instantiated with either a ReviewRequest or a ReviewRequestDraft, depending on what is being edited. This is stored in review_request_details. Functions should optimistically fetch values from that, if possible. They can call get_review_request() on review_request_details to fetch the actual ReviewRequest.

If the function takes a review_request_details parameter, it must use that instead.

tag_name = 'span'[source]

The HTML tag to be used when rendering the field.

should_render = True[source]

Whether the field should be rendered.

js_view_class = None[source]

The class name for the JavaScript view representing this field.

property value[source]

Return the value loaded from the database.

This will fetch the value with the associated ReviewRequest or ReviewRequestDraft, and then cache it for future lookups.

Returns

The value of the field.

Return type

object

has_value_changed(old_value, new_value)[source]

Return whether the value has changed.

By default, it performs an inequality check on the values. This can be overridden to perform more specialized checks.

Parameters
  • old_value (object) – The old value of the field.

  • new_value (object) – The new value of the field.

Returns

Whether the value of the field has changed.

Return type

bool

record_change_entry(changedesc, old_value, new_value)[source]

Record information on the changed values in a ChangeDescription.

By default, the values are stored as-is along with the field ID. This can be overridden to perform more specialized storage.

Parameters
serialize_change_entry(changedesc)[source]

Serialize a change entry for public consumption.

This will output a version of the change entry for use in the API. It can be the same content stored in the ChangeDescription, but does not need to be.

Parameters

changedesc (reviewboard.changedescs.models.ChangeDescription) – The change description whose field is to be serialized.

Returns

An appropriate serialization for the field.

Return type

dict

serialize_change_entry_for_model_list(field_info)[source]

Return the change entry for a list of models.

Parameters

field_info (dict) – A dictionary describing how the field has changed. This is guaranteed to have new and old keys, but may also contain added and removed keys as well.

Returns

A mapping of each key present in field_info to its list of model instances.

Return type

dict

serialize_change_entry_for_singleton(field_info)[source]

Return the change entry for a singleton.

Singleton fields (e.g., summaries) are stored in ChangeDescriptions as a list with a single element.

Parameters

field_info (dict) – A dictionary describing how the field has changed. This is guaranteed to have new and old keys, but may also contain added and removed keys as well.

Returns

A mapping of each key in field_info to a single value.

Return type

dict

serialize_change_entry_for_list(field_info)[source]

Return the change entry for a list of plain data.

Parameters

field_info (dict) – A dictionary describing how the field has changed. This is guaranteed to have new and old keys, but may also contain added and removed keys as well.

Returns

A mapping of each key in field_info to a list of values.

Return type

dict

get_change_entry_sections_html(info)[source]

Return sections of change entries with titles and rendered HTML.

By default, this just returns a single section for the field, with the field’s title and rendered change HTML.

Subclasses can override this to provide more information.

Parameters

info (dict) – A dictionary describing how the field has changed. This is guaranteed to have new and old keys, but may also contain added and removed keys as well.

Returns

A list of the change entry sections.

Return type

list of dict

render_change_entry_html(info)[source]

Render a change entry to HTML.

By default, this returns a simple “changed from X to Y” using the old and new values. This can be overridden to generate more specialized output.

This function is expected to return safe, valid HTML. Any values coming from a field or any other form of user input must be properly escaped.

Subclasses can override render_change_entry_value_html to change how the value itself will be rendered in the string.

Parameters

info (dict) – A dictionary describing how the field has changed. This is guaranteed to have new and old keys, but may also contain added and removed keys as well.

Returns

The HTML representation of the change entry.

Return type

unicode

render_change_entry_added_value_html(info, value)[source]

Render the change entry for an added value to HTML.

Parameters
  • info (dict) – A dictionary describing how the field has changed.

  • value (object) – The value of the field.

Returns

The rendered change entry.

Return type

unicode

render_change_entry_removed_value_html(info, value)[source]

Render the change entry for a removed value to HTML.

Parameters
  • info (dict) – A dictionary describing how the field has changed.

  • value (object) – The value of the field.

Returns

The rendered change entry.

Return type

unicode

render_change_entry_value_html(info, value)[source]

Render the value for a change description string to HTML.

By default, this just converts the value to text and escapes it. This can be overridden to customize how the value is displayed.

Parameters
  • info (dict) – A dictionary describing how the field has changed.

  • value (object) – The value of the field.

Returns

The rendered change entry.

Return type

unicode

load_value(review_request_details)[source]

Load a value from the review request or draft.

By default, this loads the value as-is from the extra_data field. This can be overridden if you need to deserialize the value in some way.

This must use review_request_details instead of self.review_request_details.

Parameters

review_request_details (reviewboard.reviews.models.base_review_request_details.BaseReviewRequestDetails) – The review request or draft.

save_value(value)[source]

Save the value in the review request or draft.

By default, this saves the value as-is in the extra_data field. This can be overridden if you need to serialize the value in some way.

Parameters

value (object) – The new value for the field.

propagate_data(review_request_details)[source]

Propagate data in from source review request or draft.

By default, this loads only the field’s value from a source review request or draft and saves it as-is into the review request or draft associated with the field. This can be overridden if you need to propagate additional data elements.

This method is preferable to explicitly calling load_value() and save_value() in series to propagate data from a source into a field, because it allows for copying additional data elements beyond only the field’s value.

This function must use the review_request_details parameter instead of the review_request_details attribute on the field.

Parameters

review_request_details (reviewboard.reviews.models.base_review_request_details.BaseReviewRequestDetails) – The source review request or draft whose data is to be propagated.

render_value(value)[source]

Render the value in the field.

By default, this converts to text and escapes it. This can be overridden if you need to render it in a more specific way.

This must use value instead of self.value.

Parameters

value (object) – The value to render.

Returns

The rendered value.

Return type

unicode

get_css_classes()[source]

Return the set of CSS classes to apply to the element.

By default, this will include the contents of default_css_classes, and required if it’s a required field.

This can be overridden to provide additional CSS classes, if they’re not appropriate for default_css_classes.

Returns

A set of the CSS classes to apply.

Return type

set of unicode

get_dom_attributes()[source]

Return any additional attributes to include in the element.

By default, this returns nothing.

Returns

Additional key/value pairs for attributes to include in the rendered HTML element.

Return type

dict

get_data_attributes()[source]

Return any data attributes to include in the element.

By default, this returns nothing.

Returns

The data attributes to include in the element.

Return type

dict

as_html()[source]

Return the field rendered to HTML.

Returns

The rendered field.

Return type

django.utils.safetext.SafeString

value_as_html()[source]

Return the field rendered as HTML.

By default, this just calls render_value with the value from the database.

Returns

The rendered field.

Return type

unicode

class BaseEditableField(review_request_details, request=None)[source]

Base class for an editable field.

This simply marks the field as editable.

js_view_class = 'RB.ReviewRequestFields.TextFieldView'[source]

The class name for the JavaScript view representing this field.

class BaseCommaEditableField(review_request_details, request=None)[source]

Base class for an editable comma-separated list of values.

This is used for dealing with lists of items that appear comma-separated in the UI. It works with stored lists of content on the review request or draft, and on the ChangeDescription.

Subclasses can override this to provide specialized rendering on a per-item-basis. That’s useful for showing links to items, for example.

js_view_class = 'RB.ReviewRequestFields.CommaSeparatedValuesTextFieldView'[source]

The class name for the JavaScript view representing this field.

has_value_changed(old_value, new_value)[source]

Return whether two values have changed.

If order_matters is set to True, this will do a strict list comparison. Otherwise, it will compare the items in both lists without caring about the ordering.

Parameters
  • old_value (object) – The old value of the field.

  • new_value (object) – The new value of the field.

Returns

Whether the value of the field has changed.

Return type

bool

serialize_change_entry(changedesc)[source]

Serialize a change entry for public consumption.

This will output a version of the change entry for use in the API. It can be the same content stored in the ChangeDescription, but does not need to be.

Parameters

changedesc (reviewboard.changedescs.models.ChangeDescription) – The change description whose field is to be serialized.

Returns

An appropriate serialization for the field.

Return type

dict

render_value(values)[source]

Render the list of items.

This will call out to render_item for every item. The list of rendered items will be separated by a comma and a space.

Parameters

value (object) – The value to render.

Returns

The rendered value.

Return type

unicode

render_item(item)[source]

Render an item from the list.

By default, this will convert the item to text and then escape it.

Parameters

item (object) – The item to render.

Returns

The rendered item.

Return type

unicode

render_change_entry_html(info)[source]

Render a change entry to HTML.

By default, this returns HTML containing a list of removed items, and a list of added items. This can be overridden to generate more specialized output.

This function is expected to return safe, valid HTML. Any values coming from a field or any other form of user input must be properly escaped.

Parameters

info (dict) – A dictionary describing how the field has changed. This is guaranteed to have new and old keys, but may also contain added and removed keys as well.

Returns

The HTML representation of the change entry.

Return type

unicode

render_change_entry_value_html(info, values)[source]

Render a list of items for change description HTML.

By default, this will call render_change_entry_item_html for every item in the list. The list of rendered items will be separated by a comma and a space.

Parameters
  • info (dict) – A dictionary describing how the field has changed.

  • values (list) – The value of the field.

Returns

The rendered change entry.

Return type

unicode

render_change_entry_item_html(info, item)[source]

Render an item for change description HTML.

By default, this just converts the value to text and escapes it. This can be overridden to customize how the value is displayed.

Parameters
  • info (dict) – A dictionary describing how the field has changed.

  • item (object) – The value of the item.

Returns

The rendered change entry.

Return type

unicode

class BaseTextAreaField(review_request_details, request=None)[source]

Base class for a multi-line text area field.

The text area can take either plain text or Markdown text. By default, Markdown is supported, but this can be changed by setting enable_markdown to False.

js_view_class = 'RB.ReviewRequestFields.MultilineTextFieldView'[source]

The class name for the JavaScript view representing this field.

text_type_key[source]

Return the text type key for the extra_data dictionary.

Returns

The key which stores the text type for the field.

Return type

unicode

is_text_markdown(value)[source]

Return whether the text is in Markdown format.

This can be overridden if the field needs to check something else to determine if the text is in Markdown format.

Parameters

value (unicode) – The value of the field.

Returns

Whether the text should be interpreted as Markdown.

Return type

bool

propagate_data(review_request_details)[source]

Propagate data in from source review request or draft.

In addition to the value propagation handled by the base class, this copies the text type details from a source review request or draft and saves it as-is into the review request or draft associated with the field.

Parameters

review_request_details (reviewboard.reviews.models.base_review_request_details.BaseReviewRequestDetails) – The source review request or draft whose data is to be propagated.

get_css_classes()[source]

Return the list of CSS classes.

If Markdown is enabled, and the text is in Markdown format, this will add a “rich-text” field.

Returns

A set of the CSS classes to apply.

Return type

set of unicode

get_data_attributes()[source]

Return any data attributes to include in the element.

By default, this returns nothing.

Returns

The data attributes to include in the element.

Return type

dict

render_value(text)[source]

Return the value of the field.

If Markdown is enabled, and the text is not in Markdown format, the text will be escaped.

Parameters

text (unicode) – The value of the field.

Returns

The rendered value.

Return type

unicode

should_render_as_markdown(value)[source]

Return whether the text should be rendered as Markdown.

By default, this checks if the field is set to always render any text as Markdown, or if the given text is in Markdown format.

Parameters

value (unicode) – The value of the field.

Returns

Whether the text should be rendered as Markdown.

Return type

bool

render_change_entry_html(info)[source]

Render a change entry to HTML.

This will render a diff of the changed text.

This function is expected to return safe, valid HTML. Any values coming from a field or any other form of user input must be properly escaped.

Parameters

info (dict) – A dictionary describing how the field has changed. This is guaranteed to have new and old keys, but may also contain added and removed keys as well.

Returns

The HTML representation of the change entry.

Return type

unicode

class BaseCheckboxField(review_request_details, request=None)[source]

Base class for a checkbox.

The field’s value will be either True or False.

js_view_class = 'RB.ReviewRequestFields.CheckboxFieldView'[source]

The class name for the JavaScript view representing this field.

default_value = False[source]

The default value of the field.

tag_name = 'input'[source]

The HTML tag to be used when rendering the field.

load_value(review_request_details)[source]

Load a value from the review request or draft.

Parameters

review_request_details (reviewboard.reviews.models.base_review_request_details.BaseReviewRequestDetails) – The review request or draft.

Returns

The loaded value.

Return type

bool

render_change_entry_html(info)[source]

Render a change entry to HTML.

This function is expected to return safe, valid HTML. Any values coming from a field or any other form of user input must be properly escaped.

Parameters

info (dict) – A dictionary describing how the field has changed. This is guaranteed to have new and old keys, but may also contain added and removed keys as well.

Returns

The HTML representation of the change entry.

Return type

unicode

render_change_entry_value_html(info, value)[source]

Render the value for a change description string to HTML.

Parameters
  • info (dict) – A dictionary describing how the field has changed.

  • item (object) – The value of the field.

Returns

The rendered change entry.

Return type

unicode

get_dom_attributes()[source]

Return any additional attributes to include in the element.

By default, this returns nothing.

Returns

Additional key/value pairs for attributes to include in the rendered HTML element.

Return type

dict

value_as_html()[source]

Return the field rendered as HTML.

Because the value is included as a boolean attribute on the checkbox element, this just returns the empty string.

Returns

The rendered field.

Return type

unicode

class BaseDropdownField(review_request_details, request=None)[source]

Base class for a drop-down field.

js_view_class = 'RB.ReviewRequestFields.DropdownFieldView'[source]

The class name for the JavaScript view representing this field.

default_value = None[source]

The default value of the field.

tag_name = 'select'[source]

The HTML tag to be used when rendering the field.

options = [][source]

A list of the available options for the dropdown.

Each entry in the list should be a 2-tuple of (value, label). The values must be unique. Both values and labels should be unicode.

load_value(review_request_details)[source]

Load a value from the review request or draft.

Parameters

review_request_details (reviewboard.reviews.models.base_review_request_details.BaseReviewRequestDetails) – The review request or draft.

Returns

The loaded value.

Return type

unicode

render_change_entry_value_html(info, value)[source]

Render the value for a change description string to HTML.

Parameters
  • info (dict) – A dictionary describing how the field has changed.

  • item (object) – The value of the field.

Returns

The rendered change entry.

Return type

unicode

value_as_html()[source]

Return the field rendered as HTML.

Select tags are funny kinds of inputs, and need a bunch of <option> elements inside them. This renders the “value” of the field as those options, to fit in with the base field’s template.

Returns

The rendered field.

Return type

django.utils.safestring.SafeText

class BaseDateField(review_request_details, request=None)[source]

Base class for a date field.

js_view_class = 'RB.ReviewRequestFields.DateFieldView'[source]

The class name for the JavaScript view representing this field.

default_value = ''[source]

The default value of the field.

load_value(review_request_details)[source]

Load a value from the review request or draft.

Parameters

review_request_details (reviewboard.reviews.models.base_review_request_details.BaseReviewRequestDetails) – The review request or draft.

Returns

The loaded value.

Return type

unicode

get_review_request_fields()[source]

Yield all registered field classes.

Yields

type – The field classes, as subclasses of BaseReviewRequestField

get_review_request_fieldsets(include_change_entries_only=False)[source]

Return a list of all registered fieldset classes.

As an internal optimization, the “main” fieldset can be filtered out, to help with rendering the side of the review request page.

Parameters

include_change_entries_only (bool) – Whether or not to include the change-entry only fieldset.

Returns

The requested fieldsets.

Return type

list

get_review_request_fieldset(fieldset_id)[source]

Return the fieldset with the specified ID.

Parameters

fieldset_id (unicode) – The fieldset’s ID.

Returns

The requested fieldset, or None if it could not be found.

Return type

BaseReviewRequestFieldSet

get_review_request_field(field_id)[source]

Return the field with the specified ID.

Parameters

field_id (unicode) – The field’s ID.

Returns

The requested field, or None if it could not be found.

Return type

BaseReviewRequestField

register_review_request_fieldset(fieldset)[source]

Register a custom review request fieldset.

The fieldset must have a fieldset_id attribute. This ID must be unique across all registered fieldsets, or an exception will be thrown.

Parameters

fieldset (type) – The BaseReviewRequestFieldSet subclass.

Raises

djblets.registries.errors.ItemLookupError – This will be thrown if a fieldset is already registered with the same ID.

unregister_review_request_fieldset(fieldset)[source]

Unregister a previously registered review request fieldset.

Parameters

fieldset (type) – The BaseReviewRequestFieldSet subclass.

Raises

djblets.registries.errors.ItemLookupError – This will be thrown if the fieldset is not already registered.