我有一个我开发的大型点击应用程序,但导航不同的命令/子命令变得越来越粗糙.如何将命令组织到单独的文件中?是否可以将命令及其子命令组织到单独的类中?
这是我想如何分开它的一个例子:
import click
@click.group()
@click.version_option()
def cli():
pass #Entry Point
Run Code Online (Sandbox Code Playgroud)
@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)
@cli.group()
@click.pass_context
def uptimerobot(ctx):
pass
@uptimerobot.command('add')
@click.option('--alert', …
Run Code Online (Sandbox Code Playgroud) 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) 我试图让一个测试应用程序,所以我可以玩的的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)