Switch to unified view

a/scripts/project-import.py b/scripts/project-import.py
...
...
20
        self.root_type = root_type
20
        self.root_type = root_type
21
21
22
    def deserialize(self, node, cstruct):
22
    def deserialize(self, node, cstruct):
23
        if cstruct is col.null:
23
        if cstruct is col.null:
24
            return col.null
24
            return col.null
25
        cat = M.TroveCategory.query.get(fullpath=cstruct)
26
        if not cat:
25
        cat = M.TroveCategory.query.get(fullname=cstruct)
27
            cat = M.TroveCategory.query.get(fullname=cstruct)
26
        if not cat:
28
        if not cat:
27
            raise col.Invalid(node,
29
            raise col.Invalid(node,
28
                    '"%s" is not a valid trove category.' % cstruct)
30
                    '"%s" is not a valid trove category.' % cstruct)
29
        if not cat.fullpath.startswith(self.root_type):
31
        if not cat.fullpath.startswith(self.root_type):
30
            raise col.Invalid(node,
32
            raise col.Invalid(node,
...
...
83
        if not award:
85
        if not award:
84
            raise col.Invalid(node,
86
            raise col.Invalid(node,
85
                    'Invalid award "%s".' % cstruct)
87
                    'Invalid award "%s".' % cstruct)
86
        return award
88
        return award
87
89
90
class TroveTopics(col.SequenceSchema):
91
    trove_topics = col.SchemaNode(TroveCategory("Topic"))
92
93
class TroveLicenses(col.SequenceSchema):
94
    trove_license = col.SchemaNode(TroveCategory("License"))
95
96
class TroveDatabases(col.SequenceSchema):
97
    trove_databases = col.SchemaNode(TroveCategory("Database Environment"))
98
99
class TroveStatuses(col.SequenceSchema):
100
    trove_statuses = col.SchemaNode(TroveCategory("Development Status"))
101
88
class TroveAudiences(col.SequenceSchema):
102
class TroveAudiences(col.SequenceSchema):
89
    trove_audience = col.SchemaNode(TroveCategory("Intended Audience"))
103
    trove_audience = col.SchemaNode(TroveCategory("Intended Audience"))
90
104
91
class TroveLicenses(col.SequenceSchema):
105
class TroveOSes(col.SequenceSchema):
106
    trove_oses = col.SchemaNode(TroveCategory("Operating System"))
107
108
class TroveLanguages(col.SequenceSchema):
109
    trove_languages = col.SchemaNode(TroveCategory("Programming Language"))
110
111
class TroveTranslations(col.SequenceSchema):
112
    trove_translations = col.SchemaNode(TroveCategory("Translations"))
113
114
class TroveUIs(col.SequenceSchema):
92
    trove_license = col.SchemaNode(TroveCategory("License"))
115
    trove_uis = col.SchemaNode(TroveCategory("User Interface"))
93
116
94
class Labels(col.SequenceSchema):
117
class Labels(col.SequenceSchema):
95
    label = col.SchemaNode(col.Str())
118
    label = col.SchemaNode(col.Str())
96
119
97
class Project(col.MappingSchema):
120
class Project(col.MappingSchema):
...
...
101
    description = col.SchemaNode(col.Str(), missing='')
124
    description = col.SchemaNode(col.Str(), missing='')
102
    admin = col.SchemaNode(User())
125
    admin = col.SchemaNode(User())
103
    private = col.SchemaNode(col.Bool(), missing=False)
126
    private = col.SchemaNode(col.Bool(), missing=False)
104
    labels = Labels(missing=[])
127
    labels = Labels(missing=[])
105
    external_homepage = col.SchemaNode(col.Str(), missing='')
128
    external_homepage = col.SchemaNode(col.Str(), missing='')
129
    trove_root_databases = TroveDatabases(missing=[])
130
    trove_developmentstatuses = TroveStatuses(validator=col.Length(max=6), missing=[])
106
    trove_audiences = TroveAudiences(validator=col.Length(max=6), missing=[])
131
    trove_audiences = TroveAudiences(validator=col.Length(max=6), missing=[])
107
    trove_licenses = TroveLicenses(validator=col.Length(max=6), missing=[])
132
    trove_licenses = TroveLicenses(validator=col.Length(max=6), missing=[])
133
    trove_oses = TroveOSes(missing=[])
134
    trove_languages = TroveLanguages(validator=col.Length(max=6), missing=[])
135
    trove_topics = TroveTopics(validator=col.Length(max=3), missing=[])
136
    trove_natlanguages = TroveTranslations(missing=[])
137
    trove_environments = TroveUIs(missing=[])
108
138
109
def valid_shortname(project):
139
def valid_shortname(project):
110
    if project.shortname:
140
    if project.shortname:
111
        # already validated in ProjectShortnameType validator
141
        # already validated in ProjectShortnameType validator
112
        return True
142
        return True
...
...
121
151
122
class Object(object):
152
class Object(object):
123
    def __init__(self, d):
153
    def __init__(self, d):
124
        self.__dict__.update(d)
154
        self.__dict__.update(d)
125
155
156
def trove_ids(orig, new_):
157
    return set(t._id for t in new_) or orig
158
126
def create_project(p, nbhd, options):
159
def create_project(p, nbhd, options):
127
    M.session.artifact_orm_session._get().skip_mod_date = True
160
    M.session.artifact_orm_session._get().skip_mod_date = True
128
    shortname = p.shortname or p.name.shortname
161
    shortname = p.shortname or p.name.shortname
129
    project = M.Project.query.get(shortname=shortname,
162
    project = M.Project.query.get(shortname=shortname,
130
            neighborhood_id=nbhd._id)
163
            neighborhood_id=nbhd._id)
...
...
150
    project.external_homepage = p.external_homepage
183
    project.external_homepage = p.external_homepage
151
    project.last_updated = datetime.datetime.utcnow()
184
    project.last_updated = datetime.datetime.utcnow()
152
    # These properties may have been populated by nbhd template defaults in
185
    # These properties may have been populated by nbhd template defaults in
153
    # register_project(). Overwrite if we have data, otherwise keep defaults.
186
    # register_project(). Overwrite if we have data, otherwise keep defaults.
154
    project.labels = p.labels or project.labels
187
    project.labels = p.labels or project.labels
188
    project.trove_root_database = trove_ids(project.trove_root_database, p.trove_root_databases)
189
    project.trove_developmentstatus = trove_ids(project.trove_developmentstatus, p.trove_developmentstatuses)
155
    project.trove_audience = set(a._id for a in p.trove_audiences) or \
190
    project.trove_audience = trove_ids(project.trove_audience, p.trove_audiences)
156
            project.trove_audience
157
    project.trove_license = set(l._id for l in p.trove_licenses) or \
191
    project.trove_license = trove_ids(project.trove_license, p.trove_licenses)
158
            project.trove_license
192
    project.trove_os = trove_ids(project.trove_os, p.trove_oses)
193
    project.trove_language = trove_ids(project.trove_language, p.trove_languages)
194
    project.trove_topic = trove_ids(project.trove_topic, p.trove_topics)
195
    project.trove_natlanguage = trove_ids(project.trove_natlanguage, p.trove_natlanguages)
196
    project.trove_environment = trove_ids(project.trove_environment, p.trove_environments)
197
159
    for a in p.awards:
198
    for a in p.awards:
160
        M.AwardGrant(app_config_id=bson.ObjectId(),
199
        M.AwardGrant(app_config_id=bson.ObjectId(),
161
                tool_version=dict(neighborhood='0'), award_id=a._id,
200
                tool_version=dict(neighborhood='0'), award_id=a._id,
162
                granted_to_project_id=project._id,
201
                granted_to_project_id=project._id,
163
                granted_by_neighborhood_id=nbhd._id)
202
                granted_by_neighborhood_id=nbhd._id)