]> Sergey Matveev's repositories - pyimportcan.git/blob - pyimportcan.pl
Initial revision
[pyimportcan.git] / pyimportcan.pl
1 #!/usr/bin/env perl
2 # pyimportcan.pl -- Python imports canonical format filter
3 # Copyright (C) 2013-2015 Sergey Matveev (stargrave@stargrave.org)
4 # This program is free software: you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation, either version 3 of the License, or
7 # (at your option) any later version.
8
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 #
17 # From that kind of imports:
18 #
19 #     from waaccounts.models import OrgRole
20 #     import math
21 #     from waaccounts.models import UserAccount
22 #     from waadv.filters import AdvCampaignFilterSet as foo1
23 #     from waadv.filters import AdvCampaignBidFilterSet
24 #     from waadv.filters import AdvCampaignUniqueShowFilterSet as foo2
25 #     from waadv.filters import VasttaskFilterSet
26 #     from waadv.forms import AdvCampaignCreateForm
27 #     from waadv.forms import PriceListTotalBudgetDiscountFormset
28 #     from waadv.models import Adv
29 #     from waadv.models import PriceListTotalBudgetDiscount
30 #     from waadv.models import VastTask
31 #     from wacontent.models import VrContractGroup
32 #     from wacatalog.models import AdvGroup
33 #     from wahelpers.counters import adv_campaign_click_counter_loader
34 #     from wahelpers.counters import adv_video_view_fact_counter_loader
35 #     from wahelpers.counters import adv_view_percent
36 #     from wahelpers.counters import ctr
37 #     from wahelpers.functions import get_json_rpc_proxy, get_return_url
38 #     <<<<<<< HEAD
39 #     from waorigin.kendo_menus.toolbar import KendoGridToolbar
40 #     from waorigin.kendo_menus.toolbar_button import KendoToolbarButton
41 #     =======
42 #     from http_utils import JSONResponse
43 #     from wahelpers.counters import (
44 #         adv_campaign_click_counter_loader,
45 #         adv_campaign_click_fact_counter_loader,
46 #         ctr,
47 #         adv_view_percent,
48 #     )
49 #     from waorigin.kendo_menus.toolbar_button import (
50 #     AddKendoToolbarButton,
51 #     StatusKendoToolbarButton
52 #     )
53 #     from waorigin.models import Content, ContentCategory3 as foo4, ContentCategory2, Files
54 #     from waorigin.views import filter_view, model_autocompletion, \
55 #         create_update_with_auto_user, get_objects_for_edit_many
56 #     from wapartners.models import PrNomenclature, PrSite
57 #     >>>>>>> 1bf0b64... Добавил основные кнопки в виде классов, поправил вьюху refs #11992
58 #     from waorigin.kendo_data_source import KendoDataSourceView
59 #     from waorigin.models import Content
60 #     from waorigin.models import ContentCategory2
61 #     from waorigin.models import ContentCategory3
62 #     from waorigin.models import Files
63 #     from waorigin.views import create_update_with_auto_user
64 #     from waorigin.views import filter_view
65 #     from waorigin.views import get_objects_for_edit_many
66 #     from waorigin.views import model_autocompletion
67 #     from wapartners.models import PrSite
68 #     from wapartners.models import PrNomenclature
69 #
70 # it makes the following one (by feeding it to stdin and capturing on
71 # stdout):
72 #
73 #     import math
74 #     from http_utils import JSONResponse
75 #     from waaccounts.models import OrgRole
76 #     from waaccounts.models import UserAccount
77 #     from waadv.filters import AdvCampaignBidFilterSet
78 #     from waadv.filters import AdvCampaignFilterSet as foo1
79 #     from waadv.filters import AdvCampaignUniqueShowFilterSet as foo2
80 #     from waadv.filters import VasttaskFilterSet
81 #     from waadv.forms import AdvCampaignCreateForm
82 #     from waadv.forms import PriceListTotalBudgetDiscountFormset
83 #     from waadv.models import Adv
84 #     from waadv.models import PriceListTotalBudgetDiscount
85 #     from waadv.models import VastTask
86 #     from wacatalog.models import AdvGroup
87 #     from wacontent.models import VrContractGroup
88 #     from wahelpers.counters import adv_campaign_click_counter_loader
89 #     from wahelpers.counters import adv_campaign_click_fact_counter_loader
90 #     from wahelpers.counters import adv_video_view_fact_counter_loader
91 #     from wahelpers.counters import adv_view_percent
92 #     from wahelpers.counters import ctr
93 #     from wahelpers.functions import get_json_rpc_proxy
94 #     from wahelpers.functions import get_return_url
95 #     from waorigin.kendo_data_source import KendoDataSourceView
96 #     from waorigin.kendo_menus.toolbar import KendoGridToolbar
97 #     from waorigin.kendo_menus.toolbar_button import AddKendoToolbarButton
98 #     from waorigin.kendo_menus.toolbar_button import KendoToolbarButton
99 #     from waorigin.kendo_menus.toolbar_button import StatusKendoToolbarButton
100 #     from waorigin.models import Content
101 #     from waorigin.models import ContentCategory2
102 #     from waorigin.models import ContentCategory3
103 #     from waorigin.models import ContentCategory3 as foo4
104 #     from waorigin.models import Files
105 #     from waorigin.views import create_update_with_auto_user
106 #     from waorigin.views import filter_view
107 #     from waorigin.views import get_objects_for_edit_many
108 #     from waorigin.views import model_autocompletion
109 #     from wapartners.models import PrNomenclature
110 #     from wapartners.models import PrSite
111
112 use strict;
113 use warnings;
114
115 my $buf;
116 my $con;
117 my @imports;
118 my %parsed;
119
120 # Collect strings and aggregate the splitted ones
121 while(<>){
122     next if /^[<=>]{2,}/;
123     next if /^\s*#/;
124     chop;
125     $buf = ($con ? $buf : "") . $_;
126     $con = /[\\,\(]\s*$/ ? 1 : 0;
127     next if /^\s*\)*\s*$/;
128     push @imports, $buf;
129 };
130
131 # Consolidate information from where what is imported
132 foreach (@imports) {
133     s/[\\\(\)]//g;
134     s/  */ /g;
135     next if /import\s*$/;
136     /^(.*)\s*import\s*(.*)$/;
137     my ($where, $what) = ($1, $2);
138     map { $parsed{$where}->{$_}++ } split /\s*,\s*/, $what;
139 };
140
141 foreach my $where (sort keys %parsed){
142     map { print $where . "import $_\n" } sort keys %{$parsed{$where}};
143 };