Revision fc48b144 kamaki/cli/commands/image.py
b/kamaki/cli/commands/image.py | ||
---|---|---|
235 | 235 |
|
236 | 236 |
def _filtered_by_properties(self, images): |
237 | 237 |
new_images = [] |
238 |
|
|
239 |
# def like_properties(props): |
|
240 |
# plike = self['prop_like'] |
|
241 |
# for k, v in plike.items(): |
|
242 |
# likestr = props.get(k, '').lower() |
|
243 |
# if v.lower() not in likestr: |
|
244 |
# return False |
|
245 |
# return True |
|
246 |
|
|
247 | 238 |
for img in images: |
248 | 239 |
props = [dict(img['properties'])] |
249 | 240 |
if self['prop']: |
... | ... | |
253 | 244 |
props, self['prop_like'], exact_match=False) |
254 | 245 |
if props: |
255 | 246 |
new_images.append(img) |
256 |
|
|
257 |
#if ( |
|
258 |
# self['prop'] and set( |
|
259 |
# self['prop'].items()).difference(props.items())) or ( |
|
260 |
# self['prop_like'] and not like_properties(props)): |
|
261 |
# continue |
|
262 |
#new_images.append(img) |
|
263 | 247 |
return new_images |
264 | 248 |
|
265 | 249 |
@errors.generic.all |
... | ... | |
652 | 636 |
'output results in pages (-n to set items per page, default 10)', |
653 | 637 |
'--more'), |
654 | 638 |
enum=FlagArgument('Enumerate results', '--enumerate'), |
639 |
name=ValueArgument('filter by name', '--name'), |
|
640 |
name_pref=ValueArgument( |
|
641 |
'filter by name prefix (case insensitive)', |
|
642 |
'--name-prefix'), |
|
643 |
name_suff=ValueArgument( |
|
644 |
'filter by name suffix (case insensitive)', |
|
645 |
'--name-suffix'), |
|
646 |
name_like=ValueArgument( |
|
647 |
'print only if name contains this (case insensitive)', |
|
648 |
'--name-like'), |
|
649 |
user_id=ValueArgument('filter by user_id', '--user-id'), |
|
650 |
user_name=ValueArgument('filter by username', '--user-name'), |
|
655 | 651 |
meta=KeyValueArgument( |
656 | 652 |
'filter by metadata key=value (can be repeated)', ('--metadata')), |
657 | 653 |
meta_like=KeyValueArgument( |
... | ... | |
659 | 655 |
('--metadata-like')) |
660 | 656 |
) |
661 | 657 |
|
658 |
def _filtered_by_name(self, images): |
|
659 |
np, ns, nl = self['name_pref'], self['name_suff'], self['name_like'] |
|
660 |
return [img for img in images if ( |
|
661 |
(not np) or img['name'].lower().startswith(np.lower())) and ( |
|
662 |
(not ns) or img['name'].lower().endswith(ns.lower())) and ( |
|
663 |
(not nl) or nl.lower() in img['name'].lower())] |
|
664 |
|
|
662 | 665 |
def _filter_by_metadata(self, images): |
663 | 666 |
new_images = [] |
664 |
|
|
665 | 667 |
for img in images: |
666 | 668 |
meta = [dict(img['metadata'])] |
667 | 669 |
if self['meta']: |
... | ... | |
673 | 675 |
new_images.append(img) |
674 | 676 |
return new_images |
675 | 677 |
|
678 |
def _filter_by_user(self, images): |
|
679 |
uuid = self['user_id'] or self._username2uuid(self['user_name']) |
|
680 |
return filter_dicts_by_dict(images, dict(user_id=uuid)) |
|
681 |
|
|
676 | 682 |
def _add_name(self, images, key='user_id'): |
677 | 683 |
uuids = self._uuids2usernames( |
678 | 684 |
list(set([img[key] for img in images]))) |
... | ... | |
684 | 690 |
@errors.cyclades.connection |
685 | 691 |
def _run(self): |
686 | 692 |
withmeta = bool(self['meta'] or self['meta_like']) |
687 |
detail = self['detail'] or withmeta |
|
693 |
withuser = bool(self['user_id'] or self['user_name']) |
|
694 |
detail = self['detail'] or withmeta or withuser |
|
688 | 695 |
images = self.client.list_images(detail) |
696 |
images = self._filtered_by_name(images) |
|
697 |
if withuser: |
|
698 |
images = self._filter_by_user(images) |
|
689 | 699 |
if withmeta: |
690 | 700 |
images = self._filter_by_metadata(images) |
691 | 701 |
if self['detail'] and not self['json_output']: |
692 | 702 |
images = self._add_name(self._add_name(images, 'tenant_id')) |
703 |
elif detail and not self['detail']: |
|
704 |
for img in images: |
|
705 |
for key in set(img).difference(self.PERMANENTS): |
|
706 |
img.pop(key) |
|
693 | 707 |
kwargs = dict(with_enumeration=self['enum']) |
694 | 708 |
if self['more']: |
695 | 709 |
kwargs['page_size'] = self['limit'] or 10 |
Also available in: Unified diff