| # 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() |