小编Bra*_*d T的帖子

如何将具有一组子命令的Click命令拆分为多个文件?

我有一个我开发的大型点击应用程序,但导航不同的命令/子命令变得越来越粗糙.如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?

这是我想如何分开它的一个例子:

在里面

import click

@click.group()
@click.version_option()
def cli():
    pass #Entry Point
Run Code Online (Sandbox Code Playgroud)

command_cloudflare.py

@cli.group()
@click.pass_context
def cloudflare(ctx):
    pass

@cloudflare.group('zone')
def cloudflare_zone():
    pass

@cloudflare_zone.command('add')
@click.option('--jumpstart', '-j', default=True)
@click.option('--organization', '-o', default='')
@click.argument('url')
@click.pass_obj
@__cf_error_handler
def cloudflare_zone_add(ctx, url, jumpstart, organization):
    pass

@cloudflare.group('record')
def cloudflare_record():
    pass

@cloudflare_record.command('add')
@click.option('--ttl', '-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_add(ctx, domain, name, type, content, ttl):
    pass

@cloudflare_record.command('edit')
@click.option('--ttl', '-t')
@click.argument('domain')
@click.argument('name')
@click.argument('type')
@click.argument('content')
@click.pass_obj
@__cf_error_handler
def cloudflare_record_edit(ctx, domain):
    pass
Run Code Online (Sandbox Code Playgroud)

command_uptimerobot.py

@cli.group()
@click.pass_context
def uptimerobot(ctx):
    pass

@uptimerobot.command('add')
@click.option('--alert', …
Run Code Online (Sandbox Code Playgroud)

python command-line-interface python-click

57
推荐指数
4
解决办法
2万
查看次数

如何组织我的代码,以便重复尝试除了子句只存在一次?

try语句中的代码将会有所不同,但try except语句本身始终是相同的.如何减少冗余?

def cloudflare_add_zone(ctx, url, jumpstart, organization):
    try:

        if organization:
            ctx.create_zone(url, jumpstart, organization)
        else:
            ctx.create_zone(url, jumpstart)
        click.echo('Zone successfully created: %s' % url)

    except HTTPServiceError, e:
        code = str(e.details['errors'][0]['code'])
        message = e.details['errors'][0]['message']
        click.echo(code + ":" + message)

def cloudflare_add_record(ctx, domain, name, type, content, ttl):
    try:

        payload = {
            'type': type,
            'name': name,
            'content': content
        }
        if ttl:
            payload['ttl'] = ttl
        zone_id = ctx.get_zone_by_name(domain).get('id')
        ctx.create_dns_record(zone_id, payload)

    except HTTPServiceError, e:
        code = str(e.details['errors'][0]['code'])
        message = e.details['errors'][0]['message']
        click.echo(code + ":" + message)
Run Code Online (Sandbox Code Playgroud)

python try-catch except

2
推荐指数
1
解决办法
1202
查看次数

在Marshmallow中运行时请求权限组位置的正确方法是什么?

我试图让一个测试应用程序,所以我可以玩的的LocationManager,但我甚至无法获得通过在运行时的新愚蠢的权限请求.我做错了什么,为什么他们这么混乱/复杂?

public class MainActivity extends AppCompatActivity {

    private static final int LOCATION_GROUP_PERMISSION_REQUEST = 1;
    private boolean locationPermissionGranted = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        getLocationPermission();

        if(locationPermissionGranted) {
            LocationManager locationManager =
                    (LocationManager) getSystemService(Context.LOCATION_SERVICE);
            String provider = LocationManager.GPS_PROVIDER;
            try {
                Location location = locationManager.getLastKnownLocation(provider);
                updateTextView(location);
            } catch(SecurityException e) {
                Log.e("PERMISSION_DENIED", e.getMessage());
            }
        }

        //registerReceiver(gpsReciever, new IntentFilter("android.location.PROVIDERS_CHANGED"));
    }

    private void updateTextView(Location location) {
        Double latitude = location.getLatitude();
        Double longitude = location.getLongitude();
        TextView view = (TextView) findViewById(R.id.textView);
        view.setText(getString(R.string.lat_long_string, latitude, longitude));
    } …
Run Code Online (Sandbox Code Playgroud)

android android-permissions android-6.0-marshmallow

0
推荐指数
1
解决办法
3154
查看次数