Пример #1
0
    def get(self):
        reader_key = self.get_str('reader_key')
        reader = Reader.get_reader(reader_key)
        current_reader = self.require_current_reader()
        if current_reader.key() != reader.key():
            self.return_forbidden()

        self.return_ok(
            {
                'reader': reader,
                'meters': Meter.gql(
                    "where reader = :1", current_reader).fetch(10)})
Пример #2
0
    def post(self):
        try:
            current_reader = self.require_current_reader()
            reader_key = self.post_str("reader_key")
            reader = Reader.get_reader(reader_key)
            if current_reader.key() != reader.key():
                self.return_forbidden()

            if 'remove_email' in self.request.POST:
                email = self.get_str('email')
                if email in reader.emails:
                    reader.emails.remove(email)
                    reader.put()
                    fields = self.page_fields(reader)
                    fields['message'] = "Successfully removed email address."
                    self.return_ok(fields)
                else:
                    raise HTTPBadRequest("""That email isn't associated with
                            the reader.""")

            elif 'proposed_email' in self.request.POST:
                proposed_email = self.post_str('proposed_email')
                reader.proposed_email = proposed_email.strip()
                reader.put()
                if len(proposed_email) == 0:
                    message = """Proposed email address successfully set to
                        blank."""
                else:
                    message = """Proposed email address set successfully. Now
                        sign out and then sign in using the proposed email
                        address"""
                self.return_ok(self.page_fields(reader, message))
            elif 'delete' in self.request.POST:
                for meter in Meter.gql("where reader = :1", reader):
                    meter.delete_meter()
                reader.delete()
                self.send_found('/welcome')
            else:
                name = self.post_str('name')
                reader.name = name
                reader.put()
                self.add_flash('Settings updated successfully.')
                self.return_see_other(
                    '/view_reader?reader_key=' + str(reader.key()))
        except HTTPBadRequest as e:
            self.return_bad_request(self.page_fields(reader, str(e)))
Пример #3
0
    def get(self):
        now = datetime.datetime.now()
        for meter in Meter.gql("""where next_reminder != null and
                next_reminder <= :1""", now):
            body = jinja2.Template("""
Hi,

This is a reminder from MtrHub to read your {{ meter.utility_id }} meter \
{{ meter.name }}. To change the settings, log in to:

http://www.mtrhub.com/

Regards,

MtrHub.
""").render(meter=meter)
            mail.send_mail(
                sender="MtrHub <*****@*****.**>",
                to=meter.email_address,
                subject="MtrHub: Remember to take a meter reading.",
                body=body)
            meter.set_next_reminder()
            meter.put()
        self.return_ok({})
Пример #4
0
    def get(self):
        meters = {}
        public_reads = []

        for read in Read.gql("order by read_date desc limit 50"):
            meter = read.meter
            if not meter.is_public or str(meter.key()) in meters:
                continue
            meters[str(meter.key())] = meter
            public_reads.append(read)
            if len(public_reads) > 20:
                break

        fields = {'public_reads': public_reads}
        current_reader = self.find_current_reader()
        if current_reader is not None:
            reader_meters = Meter.gql(
                "where reader = :1", current_reader).fetch(10)
            fields['meters'] = reader_meters
            fields['candidate_customer_reads'] = [
                cand for cand in [
                    mtr.candidate_customer_read() for mtr in reader_meters]
                if cand is not None]
        self.return_ok(fields)