class User(JsonObject): """ Represent a user account """ username = StringProperty() url = StringProperty() createdAt = DateTimeProperty() updatedAt = DateTimeProperty() default = BooleanProperty(default=False) @property def model_id(self): """ Use as a unique identifier """ return "{}@{}".format(self.username, self.url) @property def password(self): """ Read password directly in a OS based secured area """ return keyring.get_password(SERVICE_IDENTIFIER, self.model_id) @password.setter def password(self, value): """ Store password directly in a OS based secured area """ if value: keyring.set_password(SERVICE_IDENTIFIER, self.model_id, value) else: if keyring.get_password(SERVICE_IDENTIFIER, self.model_id): keyring.delete_password(SERVICE_IDENTIFIER, self.model_id) def __eq__(self, other): return (self.url == other.url and self.username == other.username) def __str__(self): return '{}@{}'.format(self.username, self.url)
class Sprint(JsonObject): """ Spring model """ id_ = IntegerProperty(name='id') state = StringProperty(name='state') name = StringProperty(name='name') start_date = DateTimeProperty(name='startDate') end_date = DateTimeProperty(name='endDate') complete_date = DateTimeProperty(name='completeDate') origin_board_id = IntegerProperty(name='originBoardId')
class ReportsForm(JsonObject): time = DateTimeProperty() completion_time = DateTimeProperty() start_time = DateTimeProperty() duration = IntegerProperty() submission_time = DateTimeProperty() xmlns = StringProperty() app_id = StringProperty() user_id = StringProperty() username = StringProperty()
def make_rows(self, es_results, with_checkbox): submissions = [ res['_source'] for res in self.es_results.get('hits', {}).get('hits', []) ] for form in submissions: data = calculate_form_data(self, form) row = [ DateTimeProperty().wrap( form["form"]["meta"]["timeEnd"]).strftime("%Y-%m-%d"), self._get_case_name_html(data.get('case'), with_checkbox), self._get_service_type_html(form, data.get('service_type'), with_checkbox), data.get('location_name'), get_property(data.get('case'), "card_number", EMPTY_FIELD), data.get('location_parent_name'), get_property(data.get('case'), "phone_number", EMPTY_FIELD), data.get('amount_due') ] if with_checkbox: checkbox = mark_safe( '<input type="checkbox" class="selected-element" ' 'data-formid="%(form_id)s" ' 'data-caseid="%(case_id)s" data-servicetype="%(service_type)s"/>' ) row.append(checkbox % dict(form_id=data.get('form_id'), case_id=data.get('case_id'), service_type=data.get('service_type'))) else: row.append(self.display_status) yield row
class Version(JsonObject): """ Version model """ id_ = IntegerProperty(name='id') project_id = IntegerProperty(name='projectId') name = StringProperty() description = StringProperty() archived = BooleanProperty() released = BooleanProperty() release_date = DateTimeProperty(name='releaseDate')
class OPMCase(CommCareCase): opened_on = DateTimeProperty(datetime(2010, 1, 1)) block_name = StringProperty("Sahora") type = StringProperty("pregnancy") closed = BooleanProperty(default=False) closed_on = DateTimeProperty() awc_name = StringProperty("Atri") owner_id = StringProperty("Sahora") def __init__(self, forms=None, **kwargs): super(OPMCase, self).__init__(**kwargs) self._id = "z640804p375ps5u2yx7" self._fake_forms = forms if forms is not None else [] def get_forms(self): return self._fake_forms class Meta: # This is necessary otherwise tests get sad app_label = "opm"
def rows(self): def form_data_link(instance_id): return "<a class='ajax_dialog' href='%(url)s'>%(text)s</a>" % { "url": reverse('render_form_data', args=[self.domain, instance_id]), "text": _("View Form") } submissions = [ res['_source'] for res in self.es_results.get('hits', {}).get('hits', []) ] for form in submissions: uid = form["form"]["meta"]["userID"] username = form["form"]["meta"].get("username") try: if username not in ['demo_user', 'admin']: full_name = get_cached_property(CouchUser, uid, 'full_name', expiry=7 * 24 * 60 * 60) name = '"%s"' % full_name if full_name else "" else: name = "" except (ResourceNotFound, IncompatibleDocument): name = "<b>[unregistered]</b>" init_cells = [ form_data_link(form["_id"]), (username or _('No data for username')) + (" %s" % name if name else ""), DateTimeProperty().wrap( safe_index(form, self.time_field.split('.'))).strftime( "%Y-%m-%d %H:%M:%S"), xmlns_to_name(self.domain, form.get("xmlns"), app_id=form.get("app_id")), ] def cell(field): return form["form"].get(field) init_cells.extend([cell(field) for field in self.other_fields]) yield init_cells
def make_rows(self, es_results, with_checkbox): submissions = [ res['_source'] for res in self.es_results.get('hits', {}).get('hits', []) ] for form in submissions: data = calculate_form_data(self, form) try: status_data = McctStatus.objects.get( domain=self.domain, form_id=data.get('form_id')) reason = status_data.reason except McctStatus.DoesNotExist: reason = None row = [ DateTimeProperty().wrap( form["form"]["meta"]["timeEnd"]).strftime( "%Y-%m-%d %H:%M"), self._get_case_name_html(data.get('case'), with_checkbox), self._get_service_type_html(form, data.get('service_type'), with_checkbox), data.get('location_name'), get_property(data.get('case'), "card_number", EMPTY_FIELD), data.get('location_parent_name'), get_property(data.get('case'), "phone_number", EMPTY_FIELD), data.get('amount_due'), REJECTION_REASON_DISPLAY_NAMES[reason] if reason is not None else '', form["form"]["meta"]["username"] ] if with_checkbox: checkbox = mark_safe( '<input type="checkbox" class="selected-element" ' 'data-formid="%(form_id)s" ' 'data-caseid="%(case_id)s" data-servicetype="%(service_type)s"/>' ) row.append(checkbox % dict(form_id=data.get('form_id'), case_id=data.get('case_id'), service_type=data.get('service_type'))) else: row.insert(8, self.display_status) yield row