Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAleksey Lim <alsroot@sugarlabs.org>2012-03-15 11:49:28 (GMT)
committer Aleksey Lim <alsroot@sugarlabs.org>2012-03-15 11:49:28 (GMT)
commita34e339bc2ec16734371a3924fb2f71501cf8b45 (patch)
treec428df9dee912fe49ad4cb631f60f6b2147616fa
parent1ca7f7dc59462945abe313a91aca7a03228db618 (diff)
Initial ASLO mirroring script implementation; tune objects model to handle activities
-rw-r--r--.gitignore1
-rw-r--r--TODO3
-rw-r--r--doc/objects.dia442
-rwxr-xr-xmisc/aslo_sync.py234
-rw-r--r--sugar_network_server/__init__.py2
-rw-r--r--sugar_network_server/env.py7
-rw-r--r--sugar_network_server/resources/artifact.py13
-rw-r--r--sugar_network_server/resources/context.py25
-rw-r--r--sugar_network_server/resources/idea.py2
-rw-r--r--sugar_network_server/resources/implementation.py (renamed from sugar_network_server/resources/version.py)26
-rw-r--r--sugar_network_server/resources/problem.py2
-rw-r--r--sugar_network_server/resources/question.py2
-rw-r--r--sugar_network_server/resources/report.py4
-rw-r--r--sugar_network_server/resources/review.py2
-rw-r--r--sugar_network_server/resources/solution.py4
15 files changed, 584 insertions, 185 deletions
diff --git a/.gitignore b/.gitignore
index 120bbd0..d3585db 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@ restful_document
sugar_stats_server
tmp
doc/objects.png
+sugar_network
diff --git a/TODO b/TODO
index 8b4525a..fb08af0 100644
--- a/TODO
+++ b/TODO
@@ -19,6 +19,9 @@
- initial cloud storage approach: bookmarks and votes
- name service to bind guids to names
- link sweets and SN names
+- improve security by using session token, generated on server,
+ that should be signed on client and passed via sugar_user_signature
+ HTTP header
1.0+
====
diff --git a/doc/objects.dia b/doc/objects.dia
index 98ae33e..f8e1168 100644
--- a/doc/objects.dia
+++ b/doc/objects.dia
@@ -90,16 +90,16 @@
<dia:point val="30,25"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="29.985,24.985;48.415,47.815"/>
+ <dia:rectangle val="29.985,24.985;48.6675,51.015"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="30,25"/>
</dia:attribute>
<dia:attribute name="elem_width">
- <dia:real val="18.399999999999999"/>
+ <dia:real val="18.6525"/>
</dia:attribute>
<dia:attribute name="elem_height">
- <dia:real val="22.800000000000001"/>
+ <dia:real val="26"/>
</dia:attribute>
<dia:attribute name="name">
<dia:string>#Context#</dia:string>
@@ -272,7 +272,7 @@
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#One line summary#</dia:string>
+ <dia:string>#Context name in free form#</dia:string>
</dia:attribute>
<dia:attribute name="visibility">
<dia:enum val="0"/>
@@ -286,16 +286,16 @@
</dia:composite>
<dia:composite type="umlattribute">
<dia:attribute name="name">
- <dia:string>#description#</dia:string>
+ <dia:string>#summary#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#wikitext [R WA F]#</dia:string>
+ <dia:string>#str [R WA S F]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#Multilined long description#</dia:string>
+ <dia:string>#One line short description#</dia:string>
</dia:attribute>
<dia:attribute name="visibility">
<dia:enum val="0"/>
@@ -309,16 +309,16 @@
</dia:composite>
<dia:composite type="umlattribute">
<dia:attribute name="name">
- <dia:string>#license#</dia:string>
+ <dia:string>#description#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#[enum] [R WA]#</dia:string>
+ <dia:string>#wikitext [R WA F]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#List of licenses that the entire Context provides (particular Context resources might be licensed differently); see Wiki for details#</dia:string>
+ <dia:string>#Multilined long description#</dia:string>
</dia:attribute>
<dia:attribute name="visibility">
<dia:enum val="0"/>
@@ -355,6 +355,52 @@
</dia:composite>
<dia:composite type="umlattribute">
<dia:attribute name="name">
+ <dia:string>#icon#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="type">
+ <dia:string>#blob [R WA]#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="value">
+ <dia:string>##</dia:string>
+ </dia:attribute>
+ <dia:attribute name="comment">
+ <dia:string>#Icon, in PNG or SVG format, to represent the Context#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="visibility">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="abstract">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="class_scope">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ <dia:composite type="umlattribute">
+ <dia:attribute name="name">
+ <dia:string>#artifact_icon#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="type">
+ <dia:string>#blob [R WA]#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="value">
+ <dia:string>##</dia:string>
+ </dia:attribute>
+ <dia:attribute name="comment">
+ <dia:string>#Icon, in SVG format, to represent the Context's Artifacts; icon should conform rules for Sugar icons#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="visibility">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="abstract">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="class_scope">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ <dia:composite type="umlattribute">
+ <dia:attribute name="name">
<dia:string>#rating#</dia:string>
</dia:attribute>
<dia:attribute name="type">
@@ -960,7 +1006,7 @@
<dia:string>#[]#</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#List of layers this object belongs to; see the Wiki#</dia:string>
+ <dia:string>#List of layers this object belongs to; see the Wiki for details#</dia:string>
</dia:attribute>
<dia:attribute name="visibility">
<dia:enum val="0"/>
@@ -1004,17 +1050,17 @@
</dia:object>
<dia:object type="UML - Association" version="2" id="O3">
<dia:attribute name="obj_pos">
- <dia:point val="48.4144,36.4"/>
+ <dia:point val="48.6676,38"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="48.3968,35.64;53.0176,54.84"/>
+ <dia:rectangle val="48.65,37.24;53.0176,54.84"/>
</dia:attribute>
<dia:attribute name="meta">
<dia:composite type="dict"/>
</dia:attribute>
<dia:attribute name="orth_points">
- <dia:point val="48.4144,36.4"/>
- <dia:point val="51,36.4"/>
+ <dia:point val="48.6676,38"/>
+ <dia:point val="51,38"/>
<dia:point val="51,54"/>
<dia:point val="53,54"/>
</dia:attribute>
@@ -1078,22 +1124,22 @@
<dia:color val="#000000ff"/>
</dia:attribute>
<dia:connections>
- <dia:connection handle="0" to="O0" connection="26"/>
+ <dia:connection handle="0" to="O0" connection="30"/>
</dia:connections>
</dia:object>
<dia:object type="UML - Association" version="2" id="O4">
<dia:attribute name="obj_pos">
- <dia:point val="53,60.5"/>
+ <dia:point val="53,59"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="46.9824,59.74;53.0176,68.34"/>
+ <dia:rectangle val="46.9824,58.24;53.0176,68.34"/>
</dia:attribute>
<dia:attribute name="meta">
<dia:composite type="dict"/>
</dia:attribute>
<dia:attribute name="orth_points">
- <dia:point val="53,60.5"/>
- <dia:point val="51,60.5"/>
+ <dia:point val="53,59"/>
+ <dia:point val="51,59"/>
<dia:point val="51,67.5"/>
<dia:point val="47,67.5"/>
</dia:attribute>
@@ -1163,17 +1209,17 @@
</dia:object>
<dia:object type="UML - Association" version="2" id="O5">
<dia:attribute name="obj_pos">
- <dia:point val="39.2,47.8"/>
+ <dia:point val="39.3263,51"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="39.1824,47.04;40.1,54.84"/>
+ <dia:rectangle val="39.3086,50.24;40.1,54.84"/>
</dia:attribute>
<dia:attribute name="meta">
<dia:composite type="dict"/>
</dia:attribute>
<dia:attribute name="orth_points">
- <dia:point val="39.2,47.8"/>
- <dia:point val="40,47.8"/>
+ <dia:point val="39.3263,51"/>
+ <dia:point val="40,51"/>
<dia:point val="40,54"/>
<dia:point val="39.5,54"/>
</dia:attribute>
@@ -1552,7 +1598,7 @@
<dia:string>#context#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#Context [R WN S]#</dia:string>
+ <dia:string>#Context [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -1804,7 +1850,7 @@
<dia:string>#context#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#Context [R WN S]#</dia:string>
+ <dia:string>#Context [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -2033,7 +2079,7 @@
<dia:string>#context#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#Context [R WN S]#</dia:string>
+ <dia:string>#Context [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -2178,13 +2224,13 @@
<dia:point val="8,65"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="7.985,64.985;20.45,79.815"/>
+ <dia:rectangle val="7.985,64.985;19.7275,79.815"/>
</dia:attribute>
<dia:attribute name="elem_corner">
<dia:point val="8,65"/>
</dia:attribute>
<dia:attribute name="elem_width">
- <dia:real val="12.434999999999999"/>
+ <dia:real val="11.7125"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="14.800000000000001"/>
@@ -2285,7 +2331,7 @@
<dia:string>#parent_resource#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#enum [R WN S]#</dia:string>
+ <dia:string>#enum [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -2407,7 +2453,7 @@
<dia:point val="19.6025,62.6"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="14.1999,62.5824;19.8025,65.8172"/>
+ <dia:rectangle val="13.8386,62.5824;19.8025,65.8172"/>
</dia:attribute>
<dia:attribute name="meta">
<dia:composite type="dict"/>
@@ -2415,8 +2461,8 @@
<dia:attribute name="orth_points">
<dia:point val="19.6025,62.6"/>
<dia:point val="19.6025,64"/>
- <dia:point val="14.2175,64"/>
- <dia:point val="14.2175,65.0172"/>
+ <dia:point val="13.8562,64"/>
+ <dia:point val="13.8562,65.0172"/>
</dia:attribute>
<dia:attribute name="orth_orient">
<dia:enum val="1"/>
@@ -2487,7 +2533,7 @@
<dia:point val="6.71125,59.0144"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="6.69361,58.9968;14.4175,65.8173"/>
+ <dia:rectangle val="6.69361,58.9968;14.0563,65.8173"/>
</dia:attribute>
<dia:attribute name="meta">
<dia:composite type="dict"/>
@@ -2495,8 +2541,8 @@
<dia:attribute name="orth_points">
<dia:point val="6.71125,59.0144"/>
<dia:point val="6.71125,64"/>
- <dia:point val="14.2175,64"/>
- <dia:point val="14.2175,65.0172"/>
+ <dia:point val="13.8562,64"/>
+ <dia:point val="13.8562,65.0172"/>
</dia:attribute>
<dia:attribute name="orth_orient">
<dia:enum val="1"/>
@@ -2567,7 +2613,7 @@
<dia:point val="0.205,60.1"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="0.187361,59.34;8.00324,73.24"/>
+ <dia:rectangle val="0.187361,59.34;8.01212,73.24"/>
</dia:attribute>
<dia:attribute name="meta">
<dia:composite type="dict"/>
@@ -2576,7 +2622,7 @@
<dia:point val="0.205,60.1"/>
<dia:point val="4,60.1"/>
<dia:point val="4,72.4"/>
- <dia:point val="7.9856,72.4"/>
+ <dia:point val="7.99448,72.4"/>
</dia:attribute>
<dia:attribute name="orth_orient">
<dia:enum val="0"/>
@@ -2754,7 +2800,7 @@
<dia:string>#context#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#Context [R WN S]#</dia:string>
+ <dia:string>#Context [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -3260,22 +3306,22 @@
</dia:object>
<dia:object type="UML - LargePackage" version="0" id="O20">
<dia:attribute name="obj_pos">
- <dia:point val="53,40"/>
+ <dia:point val="53,37"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="52.95,38.95;83.05,81.05"/>
+ <dia:rectangle val="52.95,35.95;84.05,81.05"/>
</dia:attribute>
<dia:attribute name="meta">
<dia:composite type="dict"/>
</dia:attribute>
<dia:attribute name="elem_corner">
- <dia:point val="53,40"/>
+ <dia:point val="53,37"/>
</dia:attribute>
<dia:attribute name="elem_width">
- <dia:real val="30"/>
+ <dia:real val="31"/>
</dia:attribute>
<dia:attribute name="elem_height">
- <dia:real val="41"/>
+ <dia:real val="44"/>
</dia:attribute>
<dia:attribute name="name">
<dia:string>#Context specific resources #</dia:string>
@@ -3304,19 +3350,19 @@
</dia:object>
<dia:object type="UML - Class" version="0" id="O21">
<dia:attribute name="obj_pos">
- <dia:point val="54,41"/>
+ <dia:point val="69,38"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="53.985,40.985;66.45,61.415"/>
+ <dia:rectangle val="68.985,37.985;81.45,63.215"/>
</dia:attribute>
<dia:attribute name="elem_corner">
- <dia:point val="54,41"/>
+ <dia:point val="69,38"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="12.434999999999999"/>
</dia:attribute>
<dia:attribute name="elem_height">
- <dia:real val="20.400000000000002"/>
+ <dia:real val="25.200000000000003"/>
</dia:attribute>
<dia:attribute name="name">
<dia:string>#Artifact#</dia:string>
@@ -3325,7 +3371,7 @@
<dia:string>#Resource#</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#Artefacts created in the Context to share within the Network#</dia:string>
+ <dia:string>#Artefacts created within the Context#</dia:string>
</dia:attribute>
<dia:attribute name="abstract">
<dia:boolean val="false"/>
@@ -3414,7 +3460,7 @@
<dia:string>#context#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#Context [R WN S]#</dia:string>
+ <dia:string>#Context [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -3434,6 +3480,29 @@
</dia:composite>
<dia:composite type="umlattribute">
<dia:attribute name="name">
+ <dia:string>#type#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="type">
+ <dia:string>#enum [R WN]#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="value">
+ <dia:string>##</dia:string>
+ </dia:attribute>
+ <dia:attribute name="comment">
+ <dia:string>#Artifact's type; see the Wiki for details#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="visibility">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="abstract">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="class_scope">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ <dia:composite type="umlattribute">
+ <dia:attribute name="name">
<dia:string>#title#</dia:string>
</dia:attribute>
<dia:attribute name="type">
@@ -3480,16 +3549,39 @@
</dia:composite>
<dia:composite type="umlattribute">
<dia:attribute name="name">
+ <dia:string>#mime_type#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="type">
+ <dia:string>#str [R WA S]#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="value">
+ <dia:string>##</dia:string>
+ </dia:attribute>
+ <dia:attribute name="comment">
+ <dia:string>#`data` MIME type#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="visibility">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="abstract">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="class_scope">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ <dia:composite type="umlattribute">
+ <dia:attribute name="name">
<dia:string>#preview#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#blob [R WA B]#</dia:string>
+ <dia:string>#blob [R WA]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#PNG image to represent the Artifact#</dia:string>
+ <dia:string>#PNG image to represent the Artifact with fixed size#</dia:string>
</dia:attribute>
<dia:attribute name="visibility">
<dia:enum val="0"/>
@@ -3506,7 +3598,7 @@
<dia:string>#data#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#blob [R WN B]#</dia:string>
+ <dia:string>#blob [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -3579,28 +3671,28 @@
</dia:object>
<dia:object type="UML - Class" version="0" id="O22">
<dia:attribute name="obj_pos">
- <dia:point val="54,62"/>
+ <dia:point val="54,38"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="53.985,61.985;65.0825,80.415"/>
+ <dia:rectangle val="53.985,37.985;65.6275,68.015"/>
</dia:attribute>
<dia:attribute name="elem_corner">
- <dia:point val="54,62"/>
+ <dia:point val="54,38"/>
</dia:attribute>
<dia:attribute name="elem_width">
- <dia:real val="11.067499999999999"/>
+ <dia:real val="11.612500000000001"/>
</dia:attribute>
<dia:attribute name="elem_height">
- <dia:real val="18.400000000000002"/>
+ <dia:real val="30.000000000000007"/>
</dia:attribute>
<dia:attribute name="name">
- <dia:string>#Version#</dia:string>
+ <dia:string>#Implementation#</dia:string>
</dia:attribute>
<dia:attribute name="stereotype">
<dia:string>#Resource#</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#Software versions in Context#</dia:string>
+ <dia:string>#Implementation of the Context, e.g., Sugar activity bundle or .xol content#</dia:string>
</dia:attribute>
<dia:attribute name="abstract">
<dia:boolean val="false"/>
@@ -3689,7 +3781,7 @@
<dia:string>#context#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#Context [R WN S]#</dia:string>
+ <dia:string>#Context [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -3709,6 +3801,29 @@
</dia:composite>
<dia:composite type="umlattribute">
<dia:attribute name="name">
+ <dia:string>#license#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="type">
+ <dia:string>#[enum] [R WN]#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="value">
+ <dia:string>##</dia:string>
+ </dia:attribute>
+ <dia:attribute name="comment">
+ <dia:string>#List of licenses that the Implementation is covered by; see the Wiki for details#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="visibility">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="abstract">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="class_scope">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ <dia:composite type="umlattribute">
+ <dia:attribute name="name">
<dia:string>#version#</dia:string>
</dia:attribute>
<dia:attribute name="type">
@@ -3764,7 +3879,7 @@
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#Version stability level in Zero Install notation#</dia:string>
+ <dia:string>#Version stability level in Zero Install notation; see the Wiki for details#</dia:string>
</dia:attribute>
<dia:attribute name="visibility">
<dia:enum val="0"/>
@@ -3801,16 +3916,62 @@
</dia:composite>
<dia:composite type="umlattribute">
<dia:attribute name="name">
+ <dia:string>#feed#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="type">
+ <dia:string>#dict [R WN]#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="value">
+ <dia:string>##</dia:string>
+ </dia:attribute>
+ <dia:attribute name="comment">
+ <dia:string>#Zero Install Implementation parameters to add to feed#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="visibility">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="abstract">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="class_scope">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ <dia:composite type="umlattribute">
+ <dia:attribute name="name">
+ <dia:string>#url#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="type">
+ <dia:string>#str [R WN]#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="value">
+ <dia:string>##</dia:string>
+ </dia:attribute>
+ <dia:attribute name="comment">
+ <dia:string>#Web url to download Implemnetation's bundle#</dia:string>
+ </dia:attribute>
+ <dia:attribute name="visibility">
+ <dia:enum val="0"/>
+ </dia:attribute>
+ <dia:attribute name="abstract">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ <dia:attribute name="class_scope">
+ <dia:boolean val="false"/>
+ </dia:attribute>
+ </dia:composite>
+ <dia:composite type="umlattribute">
+ <dia:attribute name="name">
<dia:string>#bundle#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#blob [R WN B O]#</dia:string>
+ <dia:string>#blob [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#Version's tarball; used only for off-line case#</dia:string>
+ <dia:string>#If `url` is empty, this property should contain bundle#</dia:string>
</dia:attribute>
<dia:attribute name="visibility">
<dia:enum val="0"/>
@@ -3831,16 +3992,16 @@
</dia:object>
<dia:object type="UML - Class" version="0" id="O23">
<dia:attribute name="obj_pos">
- <dia:point val="68,65"/>
+ <dia:point val="68,64"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="67.985,64.985;80.45,80.615"/>
+ <dia:rectangle val="67.985,63.985;83.145,79.615"/>
</dia:attribute>
<dia:attribute name="elem_corner">
- <dia:point val="68,65"/>
+ <dia:point val="68,64"/>
</dia:attribute>
<dia:attribute name="elem_width">
- <dia:real val="12.434999999999999"/>
+ <dia:real val="15.130000000000001"/>
</dia:attribute>
<dia:attribute name="elem_height">
<dia:real val="15.600000000000001"/>
@@ -3852,7 +4013,7 @@
<dia:string>#Resource#</dia:string>
</dia:attribute>
<dia:attribute name="comment">
- <dia:string>#Semi-automatic Reports about issues with Version#</dia:string>
+ <dia:string>#Reports about issues with Implementations#</dia:string>
</dia:attribute>
<dia:attribute name="abstract">
<dia:boolean val="false"/>
@@ -3938,10 +4099,10 @@
<dia:attribute name="attributes">
<dia:composite type="umlattribute">
<dia:attribute name="name">
- <dia:string>#version#</dia:string>
+ <dia:string>#implementation#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#Version [R WN S]#</dia:string>
+ <dia:string>#Implementation [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -4033,7 +4194,7 @@
<dia:string>#logs#</dia:string>
</dia:attribute>
<dia:attribute name="type">
- <dia:string>#blob [R WN B]#</dia:string>
+ <dia:string>#blob [R WN]#</dia:string>
</dia:attribute>
<dia:attribute name="value">
<dia:string>##</dia:string>
@@ -4060,22 +4221,20 @@
</dia:object>
<dia:object type="UML - Association" version="2" id="O24">
<dia:attribute name="obj_pos">
- <dia:point val="65.0675,70.3"/>
+ <dia:point val="59.8062,68"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="65.0499,68.54;68.0176,71.14"/>
+ <dia:rectangle val="59.7886,67.9824;68.0176,73.14"/>
</dia:attribute>
<dia:attribute name="meta">
<dia:composite type="dict"/>
</dia:attribute>
<dia:attribute name="orth_points">
- <dia:point val="65.0675,70.3"/>
- <dia:point val="66.5337,70.3"/>
- <dia:point val="66.5337,69.3"/>
- <dia:point val="68,69.3"/>
+ <dia:point val="59.8062,68"/>
+ <dia:point val="59.8062,72.3"/>
+ <dia:point val="68,72.3"/>
</dia:attribute>
<dia:attribute name="orth_orient">
- <dia:enum val="0"/>
<dia:enum val="1"/>
<dia:enum val="0"/>
</dia:attribute>
@@ -4134,27 +4293,27 @@
<dia:color val="#000000ff"/>
</dia:attribute>
<dia:connections>
- <dia:connection handle="0" to="O22" connection="13"/>
- <dia:connection handle="1" to="O23" connection="8"/>
+ <dia:connection handle="0" to="O22" connection="6"/>
+ <dia:connection handle="1" to="O23" connection="12"/>
</dia:connections>
</dia:object>
<dia:group>
<dia:attribute name="matrix"/>
<dia:object type="Standard - Box" version="0" id="O25">
<dia:attribute name="obj_pos">
- <dia:point val="61,11"/>
+ <dia:point val="62,13"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="60.9995,10.9995;83.0005,24.0005"/>
+ <dia:rectangle val="61.9995,12.9995;84.0005,24.0005"/>
</dia:attribute>
<dia:attribute name="elem_corner">
- <dia:point val="61,11"/>
+ <dia:point val="62,13"/>
</dia:attribute>
<dia:attribute name="elem_width">
<dia:real val="22"/>
</dia:attribute>
<dia:attribute name="elem_height">
- <dia:real val="13"/>
+ <dia:real val="11"/>
</dia:attribute>
<dia:attribute name="border_width">
<dia:real val="0.0010583332689479003"/>
@@ -4171,43 +4330,10 @@
</dia:object>
<dia:object type="Standard - Text" version="1" id="O26">
<dia:attribute name="obj_pos">
- <dia:point val="62,21.1586"/>
+ <dia:point val="63,14.3"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,20.5636;70.3025,21.3086"/>
- </dia:attribute>
- <dia:attribute name="text">
- <dia:composite type="text">
- <dia:attribute name="string">
- <dia:string>#[C] Calculated property#</dia:string>
- </dia:attribute>
- <dia:attribute name="font">
- <dia:font family="sans" style="0" name="Helvetica"/>
- </dia:attribute>
- <dia:attribute name="height">
- <dia:real val="0.80000000000000004"/>
- </dia:attribute>
- <dia:attribute name="pos">
- <dia:point val="62,21.1586"/>
- </dia:attribute>
- <dia:attribute name="color">
- <dia:color val="#000000ff"/>
- </dia:attribute>
- <dia:attribute name="alignment">
- <dia:enum val="0"/>
- </dia:attribute>
- </dia:composite>
- </dia:attribute>
- <dia:attribute name="valign">
- <dia:enum val="3"/>
- </dia:attribute>
- </dia:object>
- <dia:object type="Standard - Text" version="1" id="O27">
- <dia:attribute name="obj_pos">
- <dia:point val="62,12.3"/>
- </dia:attribute>
- <dia:attribute name="obj_bb">
- <dia:rectangle val="62,11.705;70.67,12.45"/>
+ <dia:rectangle val="63,13.705;71.67,14.45"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
@@ -4221,7 +4347,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,12.3"/>
+ <dia:point val="63,14.3"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
@@ -4235,12 +4361,12 @@
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
- <dia:object type="Standard - Text" version="1" id="O28">
+ <dia:object type="Standard - Text" version="1" id="O27">
<dia:attribute name="obj_pos">
- <dia:point val="62,15.3"/>
+ <dia:point val="63,17.3"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,14.705;78.725,15.45"/>
+ <dia:rectangle val="63,16.705;79.725,17.45"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
@@ -4254,7 +4380,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,15.3"/>
+ <dia:point val="63,17.3"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
@@ -4268,12 +4394,12 @@
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
- <dia:object type="Standard - Text" version="1" id="O29">
+ <dia:object type="Standard - Text" version="1" id="O28">
<dia:attribute name="obj_pos">
- <dia:point val="62,16.3"/>
+ <dia:point val="63,18.3"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,15.705;80.39,16.45"/>
+ <dia:rectangle val="63,17.705;81.39,18.45"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
@@ -4287,7 +4413,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,16.3"/>
+ <dia:point val="63,18.3"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
@@ -4301,12 +4427,12 @@
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
- <dia:object type="Standard - Text" version="1" id="O30">
+ <dia:object type="Standard - Text" version="1" id="O29">
<dia:attribute name="obj_pos">
- <dia:point val="62,14.3"/>
+ <dia:point val="63,16.3"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,13.705;75.6375,14.45"/>
+ <dia:rectangle val="63,15.705;76.6375,16.45"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
@@ -4320,7 +4446,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,14.3"/>
+ <dia:point val="63,16.3"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
@@ -4334,12 +4460,12 @@
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
- <dia:object type="Standard - Text" version="1" id="O31">
+ <dia:object type="Standard - Text" version="1" id="O30">
<dia:attribute name="obj_pos">
- <dia:point val="62,17.3"/>
+ <dia:point val="63,19.3"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,16.705;79.82,17.45"/>
+ <dia:rectangle val="63,18.705;80.82,19.45"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
@@ -4353,7 +4479,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,17.3"/>
+ <dia:point val="63,19.3"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
@@ -4367,12 +4493,12 @@
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
- <dia:object type="Standard - Text" version="1" id="O32">
+ <dia:object type="Standard - Text" version="1" id="O31">
<dia:attribute name="obj_pos">
- <dia:point val="62,13.3"/>
+ <dia:point val="63,15.3"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,12.705;73.7525,13.45"/>
+ <dia:rectangle val="63,14.705;74.7525,15.45"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
@@ -4386,7 +4512,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,13.3"/>
+ <dia:point val="63,15.3"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
@@ -4400,12 +4526,12 @@
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
- <dia:object type="Standard - Text" version="1" id="O33">
+ <dia:object type="Standard - Text" version="1" id="O32">
<dia:attribute name="obj_pos">
- <dia:point val="62,23"/>
+ <dia:point val="63,23"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,22.405;79.41,23.15"/>
+ <dia:rectangle val="63,22.405;80.41,23.15"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
@@ -4419,7 +4545,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,23"/>
+ <dia:point val="63,23"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
@@ -4433,12 +4559,12 @@
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
- <dia:object type="Standard - Text" version="1" id="O34">
+ <dia:object type="Standard - Text" version="1" id="O33">
<dia:attribute name="obj_pos">
- <dia:point val="62,18.3"/>
+ <dia:point val="63,20.3"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,17.705;75.82,18.45"/>
+ <dia:rectangle val="63,19.705;76.82,20.45"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
@@ -4452,7 +4578,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,18.3"/>
+ <dia:point val="63,20.3"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
@@ -4466,12 +4592,12 @@
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
- <dia:object type="Standard - Text" version="1" id="O35">
+ <dia:object type="Standard - Text" version="1" id="O34">
<dia:attribute name="obj_pos">
- <dia:point val="62,19.3"/>
+ <dia:point val="63,21.3"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,18.705;78.9,19.45"/>
+ <dia:rectangle val="63,20.705;79.9,21.45"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
@@ -4485,7 +4611,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,19.3"/>
+ <dia:point val="63,21.3"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
@@ -4499,17 +4625,17 @@
<dia:enum val="3"/>
</dia:attribute>
</dia:object>
- <dia:object type="Standard - Text" version="1" id="O36">
+ <dia:object type="Standard - Text" version="1" id="O35">
<dia:attribute name="obj_pos">
- <dia:point val="62,20.1586"/>
+ <dia:point val="55,12"/>
</dia:attribute>
<dia:attribute name="obj_bb">
- <dia:rectangle val="62,19.5636;79.21,20.3086"/>
+ <dia:rectangle val="55,11.405;83.9275,12.15"/>
</dia:attribute>
<dia:attribute name="text">
<dia:composite type="text">
<dia:attribute name="string">
- <dia:string>#[B] Binary large object, can be retrieved only alone#</dia:string>
+ <dia:string>#Visit http://wiki.sugarlabs.org/go/Platform_Team/Sugar_Network/Objects_model for details.#</dia:string>
</dia:attribute>
<dia:attribute name="font">
<dia:font family="sans" style="0" name="Helvetica"/>
@@ -4518,7 +4644,7 @@
<dia:real val="0.80000000000000004"/>
</dia:attribute>
<dia:attribute name="pos">
- <dia:point val="62,20.1586"/>
+ <dia:point val="55,12"/>
</dia:attribute>
<dia:attribute name="color">
<dia:color val="#000000ff"/>
diff --git a/misc/aslo_sync.py b/misc/aslo_sync.py
new file mode 100755
index 0000000..0cb29d1
--- /dev/null
+++ b/misc/aslo_sync.py
@@ -0,0 +1,234 @@
+#!/usr/bin/env python
+
+import os
+import time
+import signal
+import getpass
+
+import MySQLdb as mdb
+
+import restful_document
+import sugar_network as client
+import sugar_network_server as server
+
+
+EXCLUDE_BUNDLE_IDS = ['net.gcompris']
+
+CATEGIORIES_TO_TAGS = {
+ 'Search & Discovery': 'discovery',
+ 'Documents': 'documents',
+ 'Chat, mail and talk': 'conversation',
+ 'Programming': 'programming',
+ 'Maps & Geography': 'geography',
+ 'Media players': 'media',
+ 'Teacher tools': 'teacher',
+ 'Games': 'games',
+ 'Media creation': 'media',
+ 'Maths & Science': 'science',
+ 'News': 'news',
+ }
+
+MISNAMED_LICENSES = {
+ ('artistic', '2.0'): 'Artistic 2.0',
+ ('cc-by-sa',): 'CC-BY-SA',
+ ('creative', 'share', 'alike'): 'CC-BY-SA',
+ }
+
+
+con = mdb.connect('localhost', 'root', getpass.getpass(), 'activities')
+
+
+def main():
+ rows = sqlexec("""
+ SELECT
+ addons.id,
+ addons.guid,
+ licenses.name,
+ (select max(localized_string) from translations where
+ id=licenses.text),
+ versions.created,
+ versions.version,
+ (select max(localized_string) from translations where
+ id=versions.releasenotes),
+ files.filename,
+ (select version from appversions where
+ id=applications_versions.min),
+ (select version from appversions where
+ id=applications_versions.max)
+ FROM addons
+ INNER JOIN versions ON versions.addon_id=addons.id
+ INNER JOIN licenses ON licenses.id=versions.license_id
+ INNER JOIN files ON files.version_id=versions.id
+ INNER JOIN applications_versions ON
+ applications_versions.version_id=versions.id
+ WHERE addons.status=4
+ """)
+ for row in rows:
+ addon_id, bundle_id, license_id, alicense, release_date, version, \
+ releasenotes, filename, sugar_min, sugar_max = row
+ if [i for i in EXCLUDE_BUNDLE_IDS if i in bundle_id]:
+ continue
+
+ if license_id == 0:
+ alicense = 'MPLv1.1'
+ elif license_id == 1:
+ alicense = 'GPLv2'
+ elif license_id == 2:
+ alicense = 'GPLv3'
+ elif license_id == 3:
+ alicense = 'LGPLv2'
+ elif license_id == 4:
+ alicense = 'LGPLv3'
+ elif license_id == 5:
+ alicense = 'MIT'
+ elif license_id == 6:
+ alicense = 'BSD'
+ else:
+ for good in server.GOOD_LICENSES:
+ if not alicense or good in ['ec']:
+ continue
+ if good in alicense:
+ alicense = good
+ break
+ else:
+ for words, good in MISNAMED_LICENSES.items():
+ for i in words:
+ if i not in alicense.lower():
+ break
+ else:
+ alicense = good
+ break
+ else:
+ print '-- Skip bad license %r' % alicense
+ continue
+
+ query = client.Context.find(implement=[bundle_id])
+ if query.total:
+ assert query.total == 1
+ context_guid = query[0]['guid']
+ else:
+ context_guid = context_new(addon_id, bundle_id)
+
+ impl = client.Implementation.new()
+ impl['context'] = context_guid
+ impl['license'] = [alicense]
+ impl['version'] = version
+ impl['date'] = int(time.mktime(release_date.timetuple()))
+ impl['stability'] = 'stable'
+ impl['notes'] = releasenotes or ''
+ impl['url'] = 'http://download.sugarlabs.org/activities/%s/%s' % \
+ (addon_id, filename)
+ impl['feed'] = {
+ 'requires': {
+ 'context': 'sugar-context-guid',
+ 'constraints': [{
+ 'not-before': sugar_min,
+ 'before': '0.%s' % (int(sugar_max.split('.')[-1]) + 1),
+ }],
+ },
+ }
+ impl.post()
+
+
+def context_new(addon_id, bundle_id):
+ context = client.Context.new()
+ context['type'] = 'activity'
+ context['implement'] = [bundle_id]
+
+ context['title'], context['summary'], context['description'], \
+ context['homepage'], icondata = sqlexec("""
+ SELECT
+ (select max(localized_string) from translations where
+ id=addons.name),
+ (select max(localized_string) from translations where
+ id=addons.summary),
+ (select max(localized_string) from translations where
+ id=addons.description),
+ (select max(localized_string) from translations where
+ id=addons.homepage),
+ icondata
+ FROM addons
+ WHERE id=%s
+ """ % addon_id)[0]
+ context['summary'] = context['summary'] or context['title']
+ context['description'] = context['description'] or context['title']
+
+ tags = set()
+ for row in sqlexec("""
+ SELECT
+ (select localized_string from translations where
+ id=categories.name AND locale='en-US')
+ FROM addons_categories
+ INNER JOIN categories ON
+ categories.id=addons_categories.category_id
+ WHERE
+ addons_categories.addon_id=%s
+ """ % addon_id):
+ tags.add(CATEGIORIES_TO_TAGS[row[0]])
+ for row in sqlexec("""
+ SELECT
+ tags.tag_text
+ FROM users_tags_addons
+ INNER JOIN tags ON tags.id=users_tags_addons.tag_id
+ INNER JOIN addons_users ON
+ addons_users.addon_id=users_tags_addons.addon_id
+ WHERE
+ users_tags_addons.addon_id=%s
+ """ % addon_id):
+ tags.add(row[0])
+ context['tags'] = list(tags)
+
+ context.post()
+
+ if icondata:
+ context.set_blob('icon', icondata)
+
+ for row in sqlexec("""
+ SELECT
+ (select max(localized_string) from translations where
+ id=caption),
+ thumbdata,
+ filedata,
+ filetype
+ FROM previews
+ WHERE
+ addon_id=%s
+ """ % addon_id):
+ caption, thumb, data, mime_type = row
+
+ artifact = client.Artifact.new()
+ artifact['context'] = context['guid']
+ artifact['type'] = 'screenshot'
+ artifact['title'] = caption or ''
+ artifact['description'] = caption or ''
+ artifact['mime_type'] = mime_type
+ artifact.post()
+
+ if thumb:
+ artifact.set_blob('preview', thumb)
+ if data:
+ artifact.set_blob('data', data)
+
+ return context['guid']
+
+
+def sqlexec(text):
+ cur = con.cursor()
+ cur.execute(text)
+ return cur.fetchall()
+
+
+if __name__ == '__main__':
+ server.data_root.value = 'tmp/db'
+ server.stats_root.value = 'tmp/stats'
+ server.logdir.value = 'tmp/log'
+
+ server_pid = restful_document.fork(server.resources())
+
+ client.api_url.value = \
+ 'http://%s:%s' % (server.host.value, server.port.value)
+ try:
+ main()
+ finally:
+ os.kill(server_pid, signal.SIGINT)
+ os.waitpid(server_pid, 0)
diff --git a/sugar_network_server/__init__.py b/sugar_network_server/__init__.py
index 42143eb..60052cc 100644
--- a/sugar_network_server/__init__.py
+++ b/sugar_network_server/__init__.py
@@ -24,6 +24,8 @@ from sugar_stats_server import stats, stats_root, stats_step, \
from sugar_network_server.resources import resources
+from sugar_network_server.licenses import GOOD_LICENSES
+
def config(**kwargs):
from gettext import gettext as _
diff --git a/sugar_network_server/env.py b/sugar_network_server/env.py
index d7fadd5..155f1a0 100644
--- a/sugar_network_server/env.py
+++ b/sugar_network_server/env.py
@@ -17,13 +17,16 @@
VERSION = '0.1'
LAYERS = ['general', 'deleted']
-CONTEXT_TYPES = ['activity', 'library']
+CONTEXT_TYPES = ['application', 'library', 'activity', 'article']
SOLUTION_PARENTS = ['question', 'idea', 'problem']
NOTIFICATION_TYPES = ['create', 'update', 'delete', 'vote']
NOTIFICATION_OBJECT_TYPES = [
'', 'content', 'question', 'idea', 'problem', 'review', 'solution',
'artifact', 'version', 'report',
]
-VERSION_STABILITIES = [
+STABILITIES = [
'insecure', 'buggy', 'developer', 'testing', 'stable',
]
+ARTIFACT_TYPES = [
+ 'screenshot', 'jobject',
+ ]
diff --git a/sugar_network_server/resources/artifact.py b/sugar_network_server/resources/artifact.py
index 9dfe51d..fe3973f 100644
--- a/sugar_network_server/resources/artifact.py
+++ b/sugar_network_server/resources/artifact.py
@@ -17,16 +17,23 @@
import active_document as ad
+from sugar_network_server import env
from sugar_network_server.resources.resource import Resource, Vote
class Artifact(Resource):
- @ad.active_property(slot=1, prefix='C',
+ @ad.active_property(prefix='C',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
def context(self, value):
return value
+ @ad.active_property(prefix='T',
+ permissions=ad.ACCESS_CREATE | ad.ACCESS_READ,
+ typecast=env.ARTIFACT_TYPES)
+ def type(self, value):
+ return value
+
@ad.active_property(slot=2, prefix='S', full_text=True)
def title(self, value):
return value
@@ -43,6 +50,10 @@ class Artifact(Resource):
def description(self, value):
return value
+ @ad.active_property(prefix='M')
+ def mime_type(self, value):
+ return value
+
@ad.active_property(ad.BlobProperty)
def preview(self, value):
return value
diff --git a/sugar_network_server/resources/context.py b/sugar_network_server/resources/context.py
index 29c0082..1777146 100644
--- a/sugar_network_server/resources/context.py
+++ b/sugar_network_server/resources/context.py
@@ -19,7 +19,6 @@ import active_document as ad
from sugar_network_server import env
from sugar_network_server.resources.resource import Resource, Vote
-from sugar_network_server.licenses import GOOD_LICENSES
class Context(Resource):
@@ -52,23 +51,23 @@ class Context(Resource):
def title(self, value):
return value
- @ad.active_property(prefix='D', full_text=True)
- def description(self, value):
+ @ad.active_property(slot=4, prefix='R', full_text=True)
+ def summary(self, value):
return value
- @description.setter
- def description(self, value):
+ @summary.setter
+ def summary(self, value):
return value
- @ad.active_property(prefix='L', typecast=[GOOD_LICENSES])
- def license(self, value):
+ @ad.active_property(prefix='D', full_text=True)
+ def description(self, value):
return value
- @license.setter
- def license(self, value):
+ @description.setter
+ def description(self, value):
return value
- @ad.active_property(slot=4, prefix='H', default='', full_text=True)
+ @ad.active_property(slot=5, prefix='H', default='', full_text=True)
def homepage(self, value):
return value
@@ -76,7 +75,11 @@ class Context(Resource):
def homepage(self, value):
return value
- @ad.active_property(ad.CounterProperty, slot=5)
+ @ad.active_property(ad.BlobProperty)
+ def icon(self, value):
+ return value
+
+ @ad.active_property(ad.CounterProperty, slot=6)
def rating(self, value):
return value
diff --git a/sugar_network_server/resources/idea.py b/sugar_network_server/resources/idea.py
index ae9046c..8d340c5 100644
--- a/sugar_network_server/resources/idea.py
+++ b/sugar_network_server/resources/idea.py
@@ -22,7 +22,7 @@ from sugar_network_server.resources.resource import Resource, Vote
class Idea(Resource):
- @ad.active_property(slot=1, prefix='C',
+ @ad.active_property(prefix='C',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
def context(self, value):
return value
diff --git a/sugar_network_server/resources/version.py b/sugar_network_server/resources/implementation.py
index e440681..c75989a 100644
--- a/sugar_network_server/resources/version.py
+++ b/sugar_network_server/resources/implementation.py
@@ -16,16 +16,22 @@
import active_document as ad
from sugar_network_server import env
+from sugar_network_server.licenses import GOOD_LICENSES
from sugar_network_server.resources.resource import Resource
-class Version(Resource):
+class Implementation(Resource):
- @ad.active_property(slot=1, prefix='C',
+ @ad.active_property(prefix='C',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
def context(self, value):
return value
+ @ad.active_property(prefix='L', typecast=[GOOD_LICENSES],
+ permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
+ def license(self, value):
+ return value
+
@ad.active_property(slot=2, prefix='V',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
def version(self, value):
@@ -38,15 +44,25 @@ class Version(Resource):
@ad.active_property(slot=4, prefix='S',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ,
- typecast=env.VERSION_STABILITIES)
+ typecast=env.STABILITIES)
def stability(self, value):
return value
- @ad.active_property(
- permissions=ad.ACCESS_CREATE | ad.ACCESS_READ, full_text=True)
+ @ad.active_property(ad.StoredProperty,
+ permissions=ad.ACCESS_CREATE | ad.ACCESS_READ, default='')
+ def feed(self, value):
+ return value
+
+ @ad.active_property(full_text=True,
+ permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
def notes(self, value):
return value
+ @ad.active_property(prefix='U',
+ permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
+ def url(self, value):
+ return value
+
@ad.active_property(ad.BlobProperty)
def bundle(self, value):
return value
diff --git a/sugar_network_server/resources/problem.py b/sugar_network_server/resources/problem.py
index a056f42..91544d9 100644
--- a/sugar_network_server/resources/problem.py
+++ b/sugar_network_server/resources/problem.py
@@ -22,7 +22,7 @@ from sugar_network_server.resources.resource import Resource, Vote
class Problem(Resource):
- @ad.active_property(slot=1, prefix='C',
+ @ad.active_property(prefix='C',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
def context(self, value):
return value
diff --git a/sugar_network_server/resources/question.py b/sugar_network_server/resources/question.py
index 6b533aa..363d7ee 100644
--- a/sugar_network_server/resources/question.py
+++ b/sugar_network_server/resources/question.py
@@ -22,7 +22,7 @@ from sugar_network_server.resources.resource import Resource, Vote
class Question(Resource):
- @ad.active_property(slot=1, prefix='C',
+ @ad.active_property(prefix='C',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
def context(self, value):
return value
diff --git a/sugar_network_server/resources/report.py b/sugar_network_server/resources/report.py
index 9b8e2ff..ce9440d 100644
--- a/sugar_network_server/resources/report.py
+++ b/sugar_network_server/resources/report.py
@@ -20,9 +20,9 @@ from sugar_network_server.resources.resource import Resource
class Report(Resource):
- @ad.active_property(slot=1, prefix='V',
+ @ad.active_property(prefix='V',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
- def version(self, value):
+ def implementation(self, value):
return value
@ad.active_property(
diff --git a/sugar_network_server/resources/review.py b/sugar_network_server/resources/review.py
index 7f3900f..734ac0d 100644
--- a/sugar_network_server/resources/review.py
+++ b/sugar_network_server/resources/review.py
@@ -22,7 +22,7 @@ from sugar_network_server.resources.resource import Resource, Vote
class Review(Resource):
- @ad.active_property(slot=1, prefix='C',
+ @ad.active_property(prefix='C',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
def context(self, value):
return value
diff --git a/sugar_network_server/resources/solution.py b/sugar_network_server/resources/solution.py
index bcbd365..2f194ad 100644
--- a/sugar_network_server/resources/solution.py
+++ b/sugar_network_server/resources/solution.py
@@ -23,13 +23,13 @@ from sugar_network_server.resources.resource import Resource, Vote
class Solution(Resource):
- @ad.active_property(slot=1, prefix='T',
+ @ad.active_property(prefix='T',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ,
typecast=env.SOLUTION_PARENTS)
def parent_resource(self, value):
return value
- @ad.active_property(slot=2, prefix='P',
+ @ad.active_property(prefix='P',
permissions=ad.ACCESS_CREATE | ad.ACCESS_READ)
def parent(self, value):
return value