@@ -16,7 +16,7 @@ def __str__(self):
1616
1717
1818class URL :
19- def __init__ (self , schema , user = None , name = None , revision = None , series = None ):
19+ def __init__ (self , schema , user = None , name = None , revision = None , series = None , architecture = None ):
2020 self .schema = schema
2121 self .user = user
2222 self .name = name
@@ -26,6 +26,7 @@ def __init__(self, schema, user=None, name=None, revision=None, series=None):
2626 if revision is None :
2727 revision = - 1
2828 self .revision = revision
29+ self .architecture = architecture
2930
3031 @staticmethod
3132 def parse (s ):
@@ -57,6 +58,8 @@ def path(self):
5758 parts = []
5859 if self .user :
5960 parts .append ("~{}" .format (self .user ))
61+ if self .architecture :
62+ parts .append (self .architecture )
6063 if self .series :
6164 parts .append (self .series )
6265 if self .revision is not None and self .revision >= 0 :
@@ -114,10 +117,19 @@ def parse_v2_url(u, s):
114117 c = URL (Schema .CHARM_HUB )
115118
116119 parts = u .path .split ("/" )
117- if len (parts ) != 1 :
118- raise JujuError ("charm or bundle URL {} malformed, expected <name>" .format (s ))
119-
120- (c .name , c .revision ) = extract_revision (parts [0 ])
120+ num = len (parts )
121+ if num == 0 or num > 3 :
122+ raise JujuError ("charm or bundle URL {} malformed" .format (s ))
123+
124+ name = ""
125+ if num == 3 :
126+ c .architecture , c .series , name = parts [0 ], parts [1 ], parts [2 ]
127+ elif num == 2 :
128+ c .architecture , name = parts [0 ], parts [1 ]
129+ else :
130+ name = parts [0 ]
131+
132+ (c .name , c .revision ) = extract_revision (name )
121133 # TODO (stickupkid) - validate the name.
122134
123135 return c
0 commit comments