ForgeFeedback/forgefeedback/model/feedback.py (48 lines of code) (raw):

# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. import logging import typing from datetime import datetime from bson import ObjectId from tg import tmpl_context as c from ming import schema from ming.odm import Mapper from ming.odm import FieldProperty, ForeignIdProperty, RelationProperty # Pyforge-specific imports from allura.model.artifact import VersionedArtifact from allura.model.auth import AlluraUserProperty, User from allura.model.timeline import ActivityObject if typing.TYPE_CHECKING: from ming.odm.mapper import Query log = logging.getLogger(__name__) class Feedback(VersionedArtifact, ActivityObject): class __mongometa__: name = 'feedback' indexes = [ ('project_id', 'reported_by_id'), ] query: 'Query[Feedback]' type_s = 'Feedback' _id = FieldProperty(schema.ObjectId) created_date = FieldProperty(datetime, if_missing=datetime.utcnow) rating = FieldProperty(str, if_missing='') description = FieldProperty(str, if_missing='') reported_by_id: ObjectId = AlluraUserProperty(if_missing=lambda: c.user._id) project_id = ForeignIdProperty('Project', if_missing=lambda: c.project._id) reported_by = RelationProperty(User, via='reported_by_id') def index(self): result = VersionedArtifact.index(self) result.update( created_date_dt=self.created_date, reported_by_username_t=self.reported_by.username, text=self.description, ) return result @property def activity_name(self): return 'a review comment' @property def activity_extras(self): d = ActivityObject.activity_extras.fget(self) d.update(summary=self.description) return d def url(self): return self.app_config.url() Mapper.compile_all()