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